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);
}
次に示すコードでは、ワイド文字として ASCII 文字を表す文字 L を追加することで、この警告を修正しています。
#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);
}