Freigeben über


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));
}

Siehe auch

Referenz

static_cast Operator

sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l