Condividi tramite


C6276

Aggiornamento: novembre 2007

C6276

avviso C6276: Cast tra tipi di stringa semanticamente diversi: da char * a wchar_t *. L'utilizzo di una stringa non valida può produrre un comportamento indefinito

L'avviso indica un potenziale cast non corretto da una stringa ANSI (char_t*) a una stringa UNICODE (wchar_t *). Dal momento che le stringhe UNICODE hanno una dimensione di caratteri pari a 2 byte, il cast potrebbe produrre stringhe che non siano state terminate correttamente. L'utilizzo di tali stringhe con la libreria wcs* potrebbe provocare sovraccarichi del buffer e violazioni dell'accesso.

Esempio

Il codice seguente genera questo avviso:

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

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

Nel codice riportato di seguito l'avviso viene corretto mediante l'aggiunta alla fine della lettera L per rappresentare il carattere ASCII come carattere di tipo "wide":

#include <windows.h>

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

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

Nel codice riportato di seguito per risolvere il problema viene utilizzata la funzione di modifica delle stringhe protette wcscpy_s:

#include <windows.h>

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