Partager via


C6284

Avertissement C6284 : objet passé comme paramètre '%d' lorsqu'une chaîne est requise dans l'appel à <fonction>.

Cet avertissement indique que la chaîne de format spécifie une chaîne, par exemple, une spécification %s pour printf ou scanf, mais un objet C++ a été passé à la place.

Ce défaut peut générer une sortie incorrecte ou des blocages.

Ce message est souvent signalé en raison du passage d'un objet C++ qui implémente un type de chaîne, par exemple, std::string, CComBSTR ou bstr_t, dans un appel de style C printf. En fonction de l'implémentation de la classe C++, c'est-à-dire si les opérateurs de cast appropriés sont définis, les objets de chaîne C++ peuvent souvent être utilisés de façon transparente lorsque les chaînes C sont requises ; toutefois, étant donné que les paramètres des fonctions de style C printf ne sont pas essentiellement typées, aucune conversion vers une chaîne ne se produit.

Selon l'objet, il peut être approprié d'insérer un opérateur static_cast au type de chaîne approprié, par exemple, char * ou TCHAR * ou d'appeler une fonction membre qui retourne une chaîne, par exemple, c_str(), sur les instances de std::string.

Exemple

Le code suivant génère cet avertissement car CComBSTR est passé à la fonction sprintf :

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

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

Le code suivant utilise un cast statique pour corriger cet avertissement :

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

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

Voir aussi

Référence

static_cast Operator

sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l