Avertissement C6284
Objet passé en tant que paramètre lorsque la chaîne est requise dans l’appel à '*function*'
Notes
Cet avertissement indique qu’il existe une incompatibilité entre le spécificateur de format et le type utilisé dans une printf
fonction -style. Le spécificateur de format est un type string de style C tel que %s
ou %ws
, et l’argument est un type classe/struct/union. Ce défaut peut entraîner des blocages, en plus d’une sortie potentiellement incorrecte.
Ce défaut est souvent dû à l’oubli de convertir un type de chaîne d’objet tel que std::string
, CComBSTR
ou bstr_t
dans la chaîne de style C attendue par la printf
fonction -style. Dans ce cas, le correctif consiste à ajouter la conversion appropriée au type. La conversion est nécessaire, car les paramètres variadiques en printf
fonctions -style ne sont pas typés, donc aucune conversion automatique ne se produit.
Nom de l’analyse du code : OBJECT_AS_STRING_ARGUMENT_TO_FORMAT_FUNCTION
Exemple
#include <atlbase.h>
#include <string>
void f()
{
char buff[50];
CComBSTR bstrValue{"Hello"};
std::string str{"World"};
// Oops, %ws and %s require C-style strings but CComBSTR and std::strings are being passed instead
sprintf(buff, "%ws %s", bstrValue, str);
}
Corrigez l’avertissement en ajoutant les conversions appropriées :
#include <atlbase.h>
#include <string>
void f()
{
char buff[50];
CComBSTR bstrValue{"Hello"};
std::string str{"World"};
// Fixed by adding a static_cast to the CComBSTR and calling c_str() on the std::string
sprintf(buff, "%ws %s", static_cast<wchar_t*>(bstrValue), str.c_str());
}
Voir aussi
static_cast
(opérateur)
sprintf_s
, _sprintf_s_l
, swprintf_s
, _swprintf_s_l
C4477
C4840
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour