C6276
Обновлен: Ноябрь 2007
C6276
Предупреждение C6276: приведение между семантически различными строковыми типами: char* к wchar_t*. Использование неверной строки может привести к непредвиденному поведению.
Это предупреждение указывает на потенциально неверное приведение строки ANSI (char_t*) к строке Юникода (wchar_t *). В строках Юникода каждый знак занимает 2 байта, поэтому в результате такого приведения могут быть созданы строки, которые неверно оканчиваются. Использование таких строк с библиотекой функций wcs* может привести к переполнению доступа и нарушению прав доступа.
Пример
Это предупреждение создается следующим кодом:
#include <windows.h>
VOID f()
{
WCHAR szBuffer[8];
LPWSTR pSrc;
pSrc = (LPWSTR)"a";
wcscpy(szBuffer, pSrc);
}
В следующем примере кода это предупреждение устраняется путем присоединения буквы L, чтобы знак ASCII был представлен как широкий:
#include <windows.h>
VOID f()
{
WCHAR szBuffer[8];
LPWSTR pSrc;
pSrc = L"a";
wcscpy(szBuffer, pSrc);
}
В следующем фрагменте кода для устранения этого предупреждения используется функция безопасной обработки строк wcscpy_s:
#include <windows.h>
VOID f()
{
WCHAR szBuffer[8];
LPWSTR pSrc;
pSrc = L"a";
wcscpy_s(szBuffer,8,pSrc);
}