Поделиться через


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

См. также

Ссылки

static_cast Operator

sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l