C6284
Mise à jour : novembre 2007
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));
}