警告 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);
}
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示