Partager via


Avertissement C6276

Effectuer un cast entre différents types de chaînes sémantiquement. L’utilisation d’une chaîne non valide peut entraîner un comportement non défini.

Cet avertissement indique un cast potentiellement incorrect d’une chaîne de caractères étroite (char*) en chaîne de caractères large (wchar_t*).

Notes

Étant donné que le compilateur Microsoft implémente des chaînes larges avec une taille de caractère de 2 octets, le cast à partir d’une chaîne étroite peut produire des chaînes qui ne sont pas correctement arrêtées. Si vous utilisez ces chaînes avec les wcs* fonctions de la bibliothèque runtime, elles peuvent entraîner des dépassements de mémoire tampon et des violations d’accès.

Nom de l’analyse du code : CHAR_TO_WCHAR_CAST

Exemple

Le code suivant génère l’avertissement C6276. Cela est dû à un cast incorrect de la chaîne étroite « a » (2 octets, un pour le « a » et un pour le terminateur Null) en une chaîne large (un caractère large de 2 octets « a » sans fin null) :

#include <windows.h>

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

Le code suivant corrige cet avertissement. Il supprime le cast du problème et ajoute un L préfixe à la chaîne pour le définir comme une chaîne de caractères large correctement terminée :

#include <windows.h>

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