Compartilhar via


C6284

Aviso C6284: objeto passado como parâmetro '%d' quando a cadeia de caracteres for necessária na chamada <função>.

Esse aviso indicar que a cadeia de formato especificar uma cadeia de caracteres, por exemplo, uma especificação de %s para printf ou scanf, mas o objeto c criando foi passado em vez disso.

Este defeito pode produzir saída ou falhas incorretas.

Essa mensagem é informada frequência devido a passe o objeto c criando que implementa algum tipo de cadeia de caracteres, por exemplo, std::string, CComBSTR ou bstr_tna, c printfde estilo da chamada.Dependendo da implementação da classe do C++, ou seja, se os operadores de conversão apropriados são definidas, os objetos de cadeia de caracteres C++ podem ser usados frequentemente transparente sempre que as cadeias de caracteres c são necessárias; 2.0 no entanto, como parâmetros a printf- as funções de estilo são essencialmente não digitado, nenhuma conversão em uma cadeia de caracteres ocorrem.

Dependendo do objeto, pode ser apropriada para inserir um operador de static_cast no tipo apropriado de cadeia de caracteres, por exemplo, char * ou TCHAR*, ou chamar uma função de membro que retorna uma cadeia de caracteres, por exemplo, c_str(), em instâncias de std::string.

Exemplo

O código a seguir gerenciar esse aviso porque CComBSTR é transmitido à função de sprintf :

#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 digitação estática convertida para corrigir esse 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

Operador static_cast

sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l