次の方法で共有


C6209

警告 C6209: 'sizeof<変数1>' をパラメーター <数値> として <関数> への呼び出しで使用しています。<変数2> はワイド文字の配列である可能性があります。バイト数ではなく、文字数を使用しようとしましたか。

この警告は、関数呼び出しのパラメーターが文字数ではなく、誤ってバイト数になっている可能性があることを示します。 その場合、メモリの破損やプログラムのクラッシュが起こる可能性があります。また、悪用される可能性のあるセキュリティ ホールの原因にもなります。

この問題の一般的な原因は、文字配列での sizeof の使用です。 sizeof 演算子は、常に、バイト数を計算します。 ANSI 文字の場合、バイト数は文字数と同じですが、Unicode 文字の場合は文字数の 2 倍です。

通常は、配列のサイズを各要素のサイズによって除算することで配列の要素数を計算すると安全です。

この警告は、次の場合に生成されます。

  • 変数が 1 つのパラメーターとして渡され、可変である sizeof が別のパラメーターとして渡されている。

  • 変数型および仮パラメーター型が両方ともワイド文字へのポインターの一種になっている。

使用例

次のサンプルコードでは、sizeof pC が my_wcsncpy 関数に渡されるため、この警告が発生します。

#include<windows.h>
extern void my_wcsncpy(wchar_t *, wchar_t *, size_t);

void f( )
{
  WCHAR pC[15];
  wchar_t* input = L"Hello, World!";
  
  my_wcsncpy(pC, input, sizeof pC);
  // code ...
}

この警告を解決するには、次のコードに示すように適切なサイズを渡します。

#include<windows.h>
extern void my_wcsncpy(wchar_t *, wchar_t *, size_t);

void f( )
{
  WCHAR pC[15];
  wchar_t* input = L"Hello, World!";
  
  my_wcsncpy(pC, input, (sizeof pC) / (sizeof pC[0]));
  // code ...
}

使用されるヒューリスティックが特定のコーディング スタイルに適さない場合があるため、この警告がコード内の実際の欠陥には対応しない可能性があることに注意してください。

参照

参照

sizeof Operator

sizeof Operator (C)