Предупреждение 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);
}
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по