Compartilhar via


C6276

aviso C6276: Conversão entre tipos de cadeia de caracteres semanticamente diferentes: char* para wchar_t*.O uso de cadeia de caracteres inválida pode levar a comportamento indefinido

Esse aviso indicar uma conversão possivelmente incorreta de uma cadeia de caracteres ANSI (char_t*) em uma cadeia de caracteres UNICODE (wchar_t *).Como as cadeias de caracteres UNICODE com um tamanho de caracteres de 2 bytes, essa é convertido pode produzir as cadeias de caracteres que não são terminadas corretamente.Usar essas cadeias de caracteres com a biblioteca de wcs* das funções poderia causar violações de acesso e excesso de buffer.

Exemplo

O código a seguir gera este aviso:

#include <windows.h>
VOID f()
{
   WCHAR szBuffer[8];
   LPWSTR pSrc;

   pSrc = (LPWSTR)"a";
   wcscpy(szBuffer, pSrc); 
}

O código a seguir corrige esse aviso com a letra L para representar o caractere ASCII como um caractere largo:

#include <windows.h>

VOID f()
{
   WCHAR szBuffer[8];
   LPWSTR pSrc;

   pSrc = L"a";
   wcscpy(szBuffer, pSrc);
}

O código a seguir usa a função segura de manipulação de cadeia de caracteres, wcscpy_s, para corrigir esse aviso:

#include <windows.h>

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