C6276
Actualización: noviembre 2007
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);
}