Поделиться через


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); 
}