C6276
Ostrzeżenie C6276: rzutowanie pomiędzy różnymi semantycznie typami ciągu: char* do wchar_t*.Użycie nieprawidłowego ciągu może prowadzić do niezdefiniowanego zachowania
To ostrzeżenie wskazuje potencjalnie nieprawidłowe rzutowanie z ciągu ANSI (char_t*) na ciąg UNICODE (wchar_t *).Ponieważ rozmiar znaków ciągów UNICODE wynosi 2 bajty, to rzutowanie może uzyskać ciągi, które nie są poprawnie zakończone.Użyciu takich ciągów z biblioteką funkcji wcs* może powodować przekroczenia buforu i naruszenie zasad dostępu.
Przykład
Poniższy kod generuje to ostrzeżenie:
#include <windows.h>
VOID f()
{
WCHAR szBuffer[8];
LPWSTR pSrc;
pSrc = (LPWSTR)"a";
wcscpy(szBuffer, pSrc);
}
Poniższy kod poprawia to ostrzeżenie poprzez dołączenie litery L, aby reprezentować znak ASCII, jak szeroki znak:
#include <windows.h>
VOID f()
{
WCHAR szBuffer[8];
LPWSTR pSrc;
pSrc = L"a";
wcscpy(szBuffer, pSrc);
}
Następujący kod używa bezpiecznej funkcji do wykonywania operacji na ciągach wcscpy_s, aby poprawić to ostrzeżenie:
#include <windows.h>
VOID f()
{
WCHAR szBuffer[8];
LPWSTR pSrc;
pSrc = L"a";
wcscpy_s(szBuffer,8,pSrc);
}