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