共用方式為


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,以寬字元 (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); 
}