C6276
警告 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,以寬字元 (Wide Character) 表示 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);
}