C6284
Aviso C6284: objeto passado sistema autônomo parâmetro '% d' quando seqüência é exigida na telefonar para <função>.
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++.
Esse defeito pode produzir saída incorreta ou falhas.
Esta mensagem freqüentemente é relatada devido ao passar um objeto C++ implementar algum tipo de seqüência de caracteres, por exemplo, std::string, CComBSTR ou bstr_t, em um C printf-telefonar de estilo. Dependendo da implementação da classe C++, ou seja, se os operadores de conversão apropriadas forem definidos, objetos de cadeia de caracteres de C++ poderá geralmente ser usados, de forma transparente, sempre que seqüências C são necessárias; no entanto, como parâmetros para printf-as funções de estilo são basicamente sem tipo ocorre sem conversão para uma seqüência de caracteres.
Depending on the object, it might be appropriate to insert a static_cast operator to the appropriate string type, for example, char * or TCHAR*, or to call a member function which returns a string, for example, c_str(), on instances of std::string.
Exemplo
O código a seguir gera este aviso porque um 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 a conversão estática para corrigir este 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));
}