Sdílet prostřednictvím


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));
}

Viz také

Referenční dokumentace

static_cast operátora

sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l