次の方法で共有


警告 C6276

意味的に異なる文字列型間でキャストします。 無効な文字列を使用すると、未定義の動作が発生する可能性があります。

この警告は、狭い文字列 () からワイド文字列 (char*) へのキャストが正しくない可能性があることを示しますwchar_t*

解説

Microsoft コンパイラは、文字サイズが 2 バイトのワイド文字列を実装するため、狭い文字列からキャストすると、正しく終了しない文字列が生成される可能性があります。 ランタイム ライブラリの関数でこのような文字列を wcs* 使用すると、バッファー オーバーランやアクセス違反が発生する可能性があります。

コード分析名: CHAR_TO_WCHAR_CAST

次のコードでは、警告 C6276 が生成されます。 これは、幅の狭い文字列 "a" (2 バイト、1 つは 'a' 用、もう 1 つは null ターミネータ用) をワイド文字列 (null 終端記号のない 2 バイト幅の文字 'a') に不適切にキャストした場合に発生します。

#include <windows.h>

void f()
{
    WCHAR szBuffer[8];
    LPWSTR pSrc;
    pSrc = (LPWSTR)"a";
    wcscpy_s(szBuffer, pSrc);
}

次のコードは、この警告を修正します。 これにより、問題のキャストが削除され、文字列にプレフィックスが追加 L され、正しく終了したワイド文字列として定義されます。

#include <windows.h>

void f()
{
    WCHAR szBuffer[8];
    LPWSTR pSrc;
    pSrc = L"a";
    wcscpy_s(szBuffer, pSrc);
}