C6284
Aviso C6284: objeto passado como parâmetro '% d' quando a seqüência de caracteres é necessária na chamada para <function>.
Este aviso indica que a seqüência de caracteres de formato Especifica uma seqüência de caracteres, por exemplo, um %s especificação para printf ou scanf, mas foi passado um objeto C++ em vez disso.
Esse defeito pode produzir saída incorreta ou travamentos.
Esta mensagem é relatada freqüentemente devido a passar um objeto C++ implementar algum tipo de seqüência de caracteres, por exemplo, std::string, CComBSTR ou bstr_t, em um c printf-chamada de estilo.Dependendo da implementação da classe C++, ou seja, se os operadores de cast adequadas são definidos, objetos string de C++ podem freqüentemente ser usados de forma transparente sempre que as seqüências de caracteres c são necessárias; No entanto, como parâmetros para printf-funções de estilo são essencialmente sem tipo, não há conversão para uma seqüência de caracteres.
Dependendo do objeto, talvez seja apropriado inserir uma static_cast operador para o tipo de cadeia de caracteres apropriada, por exemplo, char * ou TCHAR*, ou para chamar uma função de membro que retorna uma seqüência de caracteres, por exemplo, c_str(), em instâncias de std::string.
Exemplo
O código a seguir gera este aviso porque uma CComBSTR é passado para o sprintf função:
#include <atlbase.h>
#include <stdlib.h>
void f()
{
char buff[50];
CComBSTR bstrValue("Bye");
sprintf(buff,"%ws",bstrValue);
}
O código a seguir usa o elenco estático 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));
}