Partager via


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