Advertencia C6276

Convertir entre tipos de cadena semánticamente diferentes. El uso de cadenas no válidas puede provocar un comportamiento indefinido.

Esta advertencia indica una conversión potencialmente incorrecta de una cadena de caracteres estrechos (char*) a una cadena de caracteres anchos (wchar_t*).

Comentarios

Dado que el compilador de Microsoft implementa cadenas anchas con un tamaño de caracteres de 2 bytes, la conversión desde una cadena estrecha podría producir cadenas que no finalizan correctamente. Si usa estas cadenas con las wcs* funciones de la biblioteca en tiempo de ejecución, podrían provocar saturaciones de búfer y infracciones de acceso.

Nombre del análisis de código: CHAR_TO_WCHAR_CAST

Ejemplo

El código siguiente genera la advertencia C6276. Se debe a una conversión incorrecta de la cadena estrecha "a" (2 bytes, una para el terminador 'a' y otra para el terminador nulo) a una cadena ancha (un carácter ancho de 2 bytes 'a' sin terminador NULO):

#include <windows.h>

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

El código siguiente corrige esta advertencia. Quita la conversión de problemas y agrega un L prefijo a la cadena para definirlo como una cadena de caracteres anchos terminada correctamente:

#include <windows.h>

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