Freigeben über


C6276

Aktualisiert: November 2007

C6276

Warnung C6276: Umwandlung zwischen semantisch unterschiedlichen Zeichenfolgentypen: char * in wchar_t *. Die Verwendung einer ungültigen Zeichenfolge kann undefiniertes Verhalten zur Folge haben.

Diese Warnung weist auf eine potenziell falsche Umwandlung einer ANSI-Zeichenfolge (char_t*) in eine UNICODE-Zeichenfolge (wchar_t *) hin. Da UNICODE-Zeichenfolgen eine Zeichengröße von 2 Bytes aufweisen, kann diese Umwandlung Zeichenfolgen erzeugen, die nicht korrekt beendet sind. Die Verwendung solcher Zeichenfolgen mit der wcs*-Bibliothek von Funktionen kann Pufferüberläufe und Zugriffsverletzungen verursachen.

Beispiel

Der folgende Code generiert diese Warnung:

#include <windows.h>
VOID f()
{
   WCHAR szBuffer[8];
   LPWSTR pSrc;

   pSrc = (LPWSTR)"a";
   wcscpy(szBuffer, pSrc); 
}

Der folgende Code korrigiert diese Warnung, indem der Buchstabe L zum Darstellen des ASCII-Zeichens als Breitzeichen angefügt wird:

#include <windows.h>

VOID f()
{
   WCHAR szBuffer[8];
   LPWSTR pSrc;

   pSrc = L"a";
   wcscpy(szBuffer, pSrc);
}

Der folgende Code verwendet die Funktion zur sicheren Zeichenfolgenbearbeitung, wcscpy_s, um diese Warnung zu korrigieren:

#include <windows.h>

VOID f()
{
   WCHAR szBuffer[8];
   LPWSTR pSrc;
   pSrc = L"a";
   wcscpy_s(szBuffer,8,pSrc); 
}