Avviso C6284
Oggetto passato come parametro quando la stringa è necessaria nella chiamata a '*function*'
Osservazioni:
Questo avviso indica che esiste una mancata corrispondenza tra l'identificatore di formato e il tipo usato in una printf
funzione -style. L'identificatore di formato è un tipo String di stile C, %s
ad esempio o %ws
e l'argomento è un tipo di classe/struct/unione. Questo difetto può causare arresti anomali, oltre a un output potenzialmente errato.
Questo difetto è spesso dovuto alla mancata conversione di un tipo stringa di oggetto, ad std::string
esempio , CComBSTR
o bstr_t
nella stringa di stile C prevista dalla printf
funzione -style. In tal caso, la correzione consiste nell'aggiungere la conversione appropriata al tipo . La conversione è necessaria perché i parametri variadic in printf
funzioni di tipo -style non sono tipizzato, quindi non viene eseguita alcuna conversione automatica.
Nome dell'analisi del codice: OBJECT_AS_STRING_ARGUMENT_TO_FORMAT_FUNCTION
Esempio
#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);
}
Correggere l'avviso aggiungendo le conversioni appropriate:
#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());
}
Vedi anche
Operatore static_cast
sprintf_s
, _sprintf_s_l
, swprintf_s
, _swprintf_s_l
C4477
C4840
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per