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