C6284
Aviso C6284: objeto passado como parâmetro '%d' quando a cadeia de caracteres for necessária na chamada <função>.
Esse aviso indicar que a cadeia de formato especificar uma cadeia de caracteres, por exemplo, uma especificação de %s para printf ou scanf, mas o objeto c criando foi passado em vez disso.
Este defeito pode produzir saída ou falhas incorretas.
Essa mensagem é informada frequência devido a passe o objeto c criando que implementa algum tipo de cadeia de caracteres, por exemplo, std::string, CComBSTR ou bstr_tna, c printfde estilo da chamada.Dependendo da implementação da classe do C++, ou seja, se os operadores de conversão apropriados são definidas, os objetos de cadeia de caracteres C++ podem ser usados frequentemente transparente sempre que as cadeias de caracteres c são necessárias; 2.0 no entanto, como parâmetros a printf- as funções de estilo são essencialmente não digitado, nenhuma conversão em uma cadeia de caracteres ocorrem.
Dependendo do objeto, pode ser apropriada para inserir um operador de static_cast no tipo apropriado de cadeia de caracteres, por exemplo, char * ou TCHAR*, ou chamar uma função de membro que retorna uma cadeia de caracteres, por exemplo, c_str(), em instâncias de std::string.
Exemplo
O código a seguir gerenciar esse aviso porque CComBSTR é transmitido à função de sprintf :
#include <atlbase.h>
#include <stdlib.h>
void f()
{
char buff[50];
CComBSTR bstrValue("Bye");
sprintf(buff,"%ws",bstrValue);
}
O código a seguir usa a digitação estática convertida para corrigir esse aviso:
#include <atlbase.h>
#include <stdlib.h>
void f()
{
char buff[50];
CComBSTR bstrValue("Bye");
sprintf_s(buff,50,"%ws",static_cast<wchar_t *>(bstrValue));
}