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 infracciones de acceso.
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);
}