C6284

Aviso C6284: objeto passado como parâmetro '% d' Quando a seqüência de caracteres é necessária na chamada para <function>.

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++ em vez disso.

Esse defeito pode produzir saída incorreta ou travamentos.

Esta mensagem é geralmente 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-estilo chamada. Dependendo da implementação da classe C++, ou seja, se definidos, os operadores de conversão adequada objetos string de C++ podem geralmente ser usados de forma transparente sempre que as seqüências de caracteres c são necessárias; No entanto, como parâmetros para printf-funções de estilo são essencialmente sem tipo, não há conversão para uma seqüência de caracteres.

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

Exemplo

O código a seguir gera este aviso porque uma 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 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

static_cast Operator

sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l