Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 printffunzione -style. L'identificatore di formato è un tipo String di stile C, %s ad esempio o %wse 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::stringesempio , CComBSTR o bstr_t nella stringa di stile C prevista dalla printffunzione -style. In tal caso, la correzione consiste nell'aggiungere la conversione appropriata al tipo . La conversione è necessaria perché i parametri variadic in printffunzioni 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
L'esempio seguente genera l'errore C6284:
#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