Compartilhar via


C6276

Aviso C6276: Converter entre tipos de seqüência semanticamente diferente: char * para wchar_t *.Uso da seqüência de caracteres inválido pode levar a um comportamento indefinido

Este aviso indica uma projeção de uma seqüência de caracteres ANSI ( possivelmente incorretachar_t*) para um UNICODE em seqüência ()wchar_t *). Como seqüências de caracteres UNICODE tem um dimensionar de caractere de 2 bytes, essa conversão pode produzir cadeias de caracteres que não são finalizadas corretamente.Usar tais cadeias de caracteres com a biblioteca de funções wcs * poderia causar estouros de buffer e violações de acesso.

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, acrescentando a letra L para representar o caractere ASCII sistema autônomo um caractere grande:

#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 de manipulação de seqüência segura, wcscpy_s, para corrigir este aviso:

#include <windows.h>

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