Предупреждение C6276

Приведение между семантически разными типами строк. Использование недопустимой строки может привести к неопределенному поведению.

Это предупреждение указывает на потенциально неправильный приведение из узкой строки символов (char*) к широкой строке символов (wchar_t*).

Замечания

Так как компилятор Майкрософт реализует широкие строки с размером символа 2 байта, приведение из узкой строки может создавать строки, которые неправильно завершаются. Если вы используете такие строки с wcs* функциями в библиотеке среды выполнения, они могут вызвать переполнение буфера и нарушения доступа.

Имя анализа кода: CHAR_TO_WCHAR_CAST

Пример

Следующий код создает предупреждение C6276. Это вызвано неправильным приведением узкой строки "a" (2 байта, один для "a" и один для конца null) к широкой строке (2-байтовый широкий символ "a" без конца null):

#include <windows.h>

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

Следующий код исправляет это предупреждение. Он удаляет приведение проблем и добавляет L префикс в строку, чтобы определить ее как правильную завершенную широкую символьную строку:

#include <windows.h>

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