C6284
Обновлен: Ноябрь 2007
C6284
Предупреждение C6284. В качестве параметра <номер> передан объект; при вызове <функция> требуется строка.
Данное предупреждение означает, что строка формата указывает на необходимость строки, например спецификации %s для функции printf или scanf, однако передан объект C++.
Данная ошибка может привести к неверному выводу или сбоям.
Данное сообщение часто выводится, если при вызове функции С в стиле printf передается объект C++, реализующий некоторый строковый тип, например std::string, CComBSTR или bstr_t. В зависимости от реализации класса C++, то есть от правильности определения операторов приведения, строковые объекты C++, как правило, прозрачно используются в тех ситуациях, когда требуются строки C; однако для параметров функций в стиле printf никогда не указывается тип, поэтому преобразование в строки не осуществляется.
Для некоторых объектов решением проблемы могло бы стать добавление оператора static_cast в соответствующий строковый тип, такой как char * или TCHAR*, или вызов для экземпляров std::string функции-члена, которая возвращает строку, например c_str().
Пример
В следующем коде в результате передачи в функцию sprintf объекта CComBSTR создается данное предупреждение.
#include <atlbase.h>
#include <stdlib.h>
void f()
{
char buff[50];
CComBSTR bstrValue("Bye");
sprintf(buff,"%ws",bstrValue);
}
В следующем коде для устранения этого предупреждения используется статический оператор приведения:
#include <atlbase.h>
#include <stdlib.h>
void f()
{
char buff[50];
CComBSTR bstrValue("Bye");
sprintf_s(buff,50,"%ws",static_cast<wchar_t *>(bstrValue));
}