Condividi tramite


Avviso C6276

Eseguire il cast tra tipi di stringa semanticamente diversi. L'uso di una stringa non valida può causare un comportamento non definito.

Questo avviso indica un cast potenzialmente errato da una stringa di caratteri stretta (char*) a una stringa di caratteri wide (wchar_t*).

Osservazioni:

Poiché il compilatore Microsoft implementa stringhe wide con una dimensione di carattere di 2 byte, il cast da una stringa stretta potrebbe produrre stringhe non terminate correttamente. Se si usano tali stringhe con le wcs* funzioni nella libreria di runtime, potrebbero causare sovraccarichi del buffer e violazioni di accesso.

Nome dell'analisi del codice: CHAR_TO_WCHAR_CAST

Esempio

Il codice seguente genera l'avviso C6276. È causato da un cast non corretto della stringa stretta "a" (2 byte, uno per "a" e uno per il terminatore Null) a una stringa wide (un carattere wide a2 byte senza terminatore Null):

#include <windows.h>

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

Il codice seguente corregge questo avviso. Rimuove il cast del problema e aggiunge un L prefisso alla stringa per definirlo come stringa di caratteri wide terminata correttamente:

#include <windows.h>

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