Warnung C6276
Umwandlung zwischen semantisch unterschiedlichen Zeichenfolgentypen. Die Verwendung einer ungültigen Zeichenfolge kann zu einem nicht definierten Verhalten führen.
Diese Warnung weist auf eine potenziell falsche Umwandlung von einer schmalen Zeichenfolge (char*
) in eine breite Zeichenfolge (wchar_t*
) hin.
Hinweise
Da der Microsoft-Compiler breite Zeichenfolgen mit einer Zeichengröße von 2 Byte implementiert, kann das Umwandeln aus einer schmalen Zeichenfolge Zeichenfolgen erzeugen, die nicht ordnungsgemäß beendet werden. Wenn Sie solche Zeichenfolgen mit den wcs*
Funktionen in der Laufzeitbibliothek verwenden, können sie Pufferüberläufe und Zugriffsverletzungen verursachen.
Codeanalysename: CHAR_TO_WCHAR_CAST
Beispiel
Der folgende Code generiert Warnung C6276. Dies wird durch eine unsachgemäße Umwandlung der schmalen Zeichenfolge "a" (2 Byte, eine für das "a" und eine für den Null-Terminator) in eine breite Zeichenfolge (ein 2-Byte-breites Zeichen "a" ohne Null-Terminator) verursacht:
#include <windows.h>
void f()
{
WCHAR szBuffer[8];
LPWSTR pSrc;
pSrc = (LPWSTR)"a";
wcscpy_s(szBuffer, pSrc);
}
Der folgende Code korrigiert diese Warnung. Das Problem wird entfernt und der Zeichenfolge ein L
Präfix hinzugefügt, um es als ordnungsgemäß beendete breite Zeichenfolge zu definieren:
#include <windows.h>
void f()
{
WCHAR szBuffer[8];
LPWSTR pSrc;
pSrc = L"a";
wcscpy_s(szBuffer, pSrc);
}