Udostępnij za pośrednictwem


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