C6276C6276

avertissement C6276 : Cast entre types de chaînes sémantiquement différentes : char * à wchar_t*.warning C6276: Cast between semantically different string types: char* to wchar_t*. Utilisation de la chaîne non valide peut entraîner un comportement non définiUse of invalid string can lead to undefined behavior

Cet avertissement indique un cast potentiellement incorrect d’une chaîne ANSI (char_t*) en une chaîne UNICODE (wchar_t *).This warning indicates a potentially incorrect cast from an ANSI string (char_t*) to a UNICODE string (wchar_t *). Étant donné que les chaînes UNICODE ayant une taille de caractères de 2 octets, ce cast peut générer des chaînes qui ne sont pas terminées correctement.Because UNICODE strings have a character size of 2 bytes, this cast might yield strings that are not correctly terminated. À l’aide de ces chaînes avec la bibliothèque de fonctions wcs * peut provoquer des dépassements de mémoire tampon et les violations d’accès.Using such strings with the wcs* library of functions could cause buffer overruns and access violations.

ExempleExample

Le code suivant génère cet avertissement :The following code generates this warning:

#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 :The following code corrects this warning by appending the letter L to represent the ASCII character as a wide character:

#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îne sécurisée, wcscpy_s, pour corriger cet avertissement :The following code uses the safe string manipulation function, wcscpy_s, to correct this warning:

#include <windows.h>

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