Udostępnij za pośrednictwem


C6284

Ostrzeżenie C6284: obiektu przekazane jako parametr '% d', gdy wymagane jest ciąg w wywołaniu <function>.

To ostrzeżenie wskazuje, że ciąg formatu określa ciąg, na przykład, %s specyfikacji dla printf lub scanf, ale zamiast został przekazany obiekt C++.

Wada ten może powodować niepoprawne dane wyjściowe lub awariom.

Ten komunikat jest często przekazywane z powodu przekazując obiekt C++ wykonania niektórych typu ciąg znaków, na przykład, std::string, CComBSTR lub bstr_t, w c printf-stylu wywołania.W zależności od implementacji klasy C++ oznacza to, że jeśli operatorów właściwego cast są zdefiniowane, obiektów typu string C++ może często być stosowane przezroczysty w każdym przypadku, gdy c ciągi są wymagane; Jednakże ponieważ parametry do printf-funkcje stylu są zasadniczo bez typu, występuje brak konwersji na ciąg.

W zależności od obiektu, może być właściwe wstawić static_cast operator typu odpowiedni ciąg, na przykład, char * lub TCHAR*, lub do wywołania funkcji składowej, która zwraca ciąg znaków, na przykład, c_str(), o przypadkach wystąpienia std::string.

Przykład

Poniższy kod generuje to ostrzeżenie, ponieważ CComBSTR jest przekazywana do sprintf funkcji:

#include <atlbase.h>
#include <stdlib.h>

void f()
{
  char buff[50];
  CComBSTR bstrValue("Bye");
 
  sprintf(buff,"%ws",bstrValue); 
}

Następujący kod używa cast statyczne, aby poprawić to ostrzeżenie:

#include <atlbase.h>
#include <stdlib.h>

void f()
{
  char buff[50];
  CComBSTR bstrValue("Bye");
  
  sprintf_s(buff,50,"%ws",static_cast<wchar_t *>(bstrValue));
}

Zobacz też

Informacje

Operator static_cast

sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l