C6276
avertissement C6276 : cast entre types de chaînes sémantiquement différentes : char* à wchar_t*. L'utilisation d'une chaîne non valide peut engendrer un comportement non défini
Cet avertissement indique un cast potentiellement incorrect d'une chaîne ANSI (char_t*) vers une chaîne UNICODE (wchar_t *). Les chaînes UNICODE ayant une taille de caractère de 2 octets, ce cast peut générer des chaînes qui ne sont pas correctement terminées. L'utilisation de ces chaînes avec la bibliothèque de fonctions wcs * peut provoquer des dépassements de mémoire tampon et des violations d'accès.
Exemple
Le code suivant génère cet avertissement :
#include <windows.h>
VOID f()
{
WCHAR szBuffer[8];
LPWSTR pSrc;
pSrc = (LPWSTR)"a";
wcscpy(szBuffer, pSrc);
}
Le code suivant corrige cet avertissement en ajoutant la lettre L pour représenter le caractère ASCII comme un caractère large :
#include <windows.h>
VOID f()
{
WCHAR szBuffer[8];
LPWSTR pSrc;
pSrc = L"a";
wcscpy(szBuffer, pSrc);
}
Le code suivant utilise la fonction de manipulation de chaînes sécurisée, wcscpy_s, pour corriger cet avertissement :
#include <windows.h>
VOID f()
{
WCHAR szBuffer[8];
LPWSTR pSrc;
pSrc = L"a";
wcscpy_s(szBuffer,8,pSrc);
}