C6284

Note

This article applies to Visual Studio 2015. If you're looking for the latest Visual Studio documentation, see Visual Studio documentation. We recommend upgrading to the latest version of Visual Studio. Download it here

warning C6284: object passed as parameter '%d' when string is required in call to <function>.

This warning indicates that the format string specifies a string, for example, a %s specification for printf or scanf, but a C++ object has been passed instead.

This defect might produce incorrect output or crashes.

This message is often reported due to passing a C++ object implementing some string type, for example, std::string, CComBSTR or bstr_t, into a C printf-style call. Depending on the implementation of the C++ class, that is, if the proper cast operators are defined, C++ string objects can often be used transparently whenever C strings are required; however, because parameters to printf-style functions are essentially untyped, no conversion to a string occurs.

Depending on the object, it might be appropriate to insert a static_cast operator to the appropriate string type, for example, char * or TCHAR``*, or to call a member function which returns a string, for example, c_str(), on instances of std::string.

Example

The following code generates this warning because a CComBSTR is passed to the sprintf function:

#include <atlbase.h>  
#include <stdlib.h>  
  
void f()  
{  
  char buff[50];  
  CComBSTR bstrValue("Bye");  
  
  sprintf(buff,"%ws",bstrValue);   
}  

The following code uses static cast to correct this warning:

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

See Also

static_cast Operator
sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l