Compartilhar via


C6284

Aviso C6284: objeto passado sistema autônomo parâmetro '% d' quando seqüência é exigida na telefonar para <função>.

Este aviso indica que a seqüência de caracteres de formato Especifica uma seqüência de caracteres, por exemplo, um %s especificação para printf ou scanf, mas foi passado um objeto C++.

Esse defeito pode produzir saída incorreta ou falhas.

Esta mensagem freqüentemente é relatada devido ao passar um objeto C++ implementar algum tipo de seqüência de caracteres, por exemplo, std::string, CComBSTR ou bstr_t, em um C printf-telefonar de estilo. Dependendo da implementação da classe C++, ou seja, se os operadores de conversão apropriadas forem definidos, objetos de cadeia de caracteres de C++ poderá geralmente ser usados, de forma transparente, sempre que seqüências C são necessárias; no entanto, como parâmetros para printf-as funções de estilo são basicamente sem tipo ocorre sem conversão para uma seqüência de caracteres.

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.

Exemplo

O código a seguir gera este aviso porque um CComBSTR é passado para o sprintf função:

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

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

O código a seguir usa a conversão estática para corrigir este aviso:

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

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

Consulte também

Referência

static_cast Operador

sprintf_s _sprintf_s_l swprintf_s, _swprintf_s_l