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