Compartir a través de


C6276

Advertencia C6276: Conversión entre tipos enteros semánticamente diferentes: char * en wchar_t *. El uso de una cadena no válida puede dar lugar a un comportamiento no definido

Esta advertencia indica una conversión de tipos potencialmente incorrecta de una cadena ANSI (char_t*) a una cadena de UNICODE (wchar_t *). Dado que las cadenas de UNICODE tienen un tamaño de carácter de 2 bytes, esta conversión de tipos podría producir cadenas que no se finalizan correctamente. Si se utilizan este tipo de cadenas con la biblioteca con wcs* de funciones podría producir saturaciones del búfer e intentos de acceso no permitido.

Ejemplo

El código siguiente genera esta advertencia:

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

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

El código siguiente corrige esta advertencia anexando la letra L para representar el carácter ASCII como un carácter ancho:

#include <windows.h>

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

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

El código de ejemplo siguiente utiliza la función de manipulación de cadenas de caracteres segura, wcscpy_s, para corregir esta advertencia:

#include <windows.h>

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