C6276

更新:2007 年 11 月

警告 C6276:语义不同的字符串类型之间的强制转换: char* 到 wchar_t*。使用无效的字符串会导致未定义的行为

此警告意味着有可能错误地将 ANSI 字符串 (char_t*) 强制转换为 UNICODE 字符串 (wchar_t *)。因为 UNICODE 字符串的字符大小为 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); 
}