C6284
Warnung C6284: Ein Objekt wurde als '%d'-Parameter übergeben. Im Aufruf von <Funktion> ist jedoch eine Zeichenfolge erforderlich.
Diese Warnung gibt an, dass in der Formatzeichenfolge eine Zeichenfolge angegeben ist, z. B. eine %s-Spezifikation für printf oder scanf, stattdessen jedoch ein C++-Objekt übergeben wurde.
Dieser Fehler könnte eine falsche Ausgabe oder Abstürze verursachen.
Diese Meldung wird häufig ausgegeben, wenn in einem printf-Aufruf in C ein C++-Objekt übergeben wird, das einen Zeichenfolgentyp implementiert, z. B. std::string, CComBSTR oder bstr_t.Je nach der Implementierung der C++-Klasse, d. h. abhängig davon, ob die richtigen Umwandlungsoperatoren definiert sind, können C++-Zeichenfolgenobjekte häufig transparent verwendet werden, wenn C-Zeichenfolgen erforderlich sind. Da jedoch Parameter für printf-Funktionen im Wesentlichen nicht typisiert sind, erfolgt keine Konvertierung in eine Zeichenfolge.
Je nach dem Objekt empfiehlt es sich möglicherweise, einen Operator static_cast in den entsprechenden Zeichenfolgentyp einzufügen, z. B. char * oder TCHAR*, oder für Instanzen von std::string eine Memberfunktion aufzurufen, die eine Zeichenfolge zurückgibt, z. B. c_str().
Beispiel
Im folgenden Code wird diese Warnung generiert, da CComBSTR an die sprintf-Funktion übergeben wird:
#include <atlbase.h>
#include <stdlib.h>
void f()
{
char buff[50];
CComBSTR bstrValue("Bye");
sprintf(buff,"%ws",bstrValue);
}
Im folgenden Code wird statische Umwandlung verwendet, um diese Warnung zu korrigieren:
#include <atlbase.h>
#include <stdlib.h>
void f()
{
char buff[50];
CComBSTR bstrValue("Bye");
sprintf_s(buff,50,"%ws",static_cast<wchar_t *>(bstrValue));
}