C6284
upozornění C6284: objekt je předán jako parametr '% d' při volání <function> je požadován řetězec.
Toto upozornění znamená, že formátovací řetězec Určuje řetězec, například, %s specifikace pro printf nebo scanf, ale místo toho byl předán objekt jazyka C++.
Tato vada by mohla vést k selhání nebo chybné výstupu.
Tato zpráva často vykazovány kvůli předávání C++ objekt provádění některých typ řetězce, například std::string, CComBSTR nebo bstr_t, do c printf-styl volání.V závislosti na implementaci třídy jazyka C++, pokud jsou definovány řádné osazení operátory, řetězec objektů C++ lze často použít transparentně při každém c řetězce jsou požadovány; ale protože parametry printf-styl funkce jsou v podstatě netypovou dochází bez převodu na řetězec.
V závislosti na objektu, je vhodné vložit static_cast operátor odpovídající řetězec typu, například char * nebo TCHAR*, nebo volat členské funkce, která vrací řetězec, například c_str(), na instance std::string.
Příklad
Následující kód vygeneruje tato upozornění, protože CComBSTR je předána sprintf funkce:
#include <atlbase.h>
#include <stdlib.h>
void f()
{
char buff[50];
CComBSTR bstrValue("Bye");
sprintf(buff,"%ws",bstrValue);
}
Následující kód používá statický cast opravit toto upozornění:
#include <atlbase.h>
#include <stdlib.h>
void f()
{
char buff[50];
CComBSTR bstrValue("Bye");
sprintf_s(buff,50,"%ws",static_cast<wchar_t *>(bstrValue));
}