sizeof
*sizeof
ほとんど常に間違っています。文字数またはバイト数を使用するつもりでしたか?
この警告は、2 つの sizeof
操作の結果が乗算されたことを示します。
解説
C/c ++ sizeof
演算子は、オブジェクトが使用するストレージのバイト数を返します。 通常、別の sizeof
操作で乗算するのは正しくありません。 通常、オブジェクト内のバイト数や配列内の要素の数 (配列内のワイド文字の数など) に関心があります。
sizeof
演算子には直感的でない動作がいくつかあります。 たとえば、C では、文字が整数型であるため、 sizeof ('\0') == 4
。 C++ では、文字リテラルの型は char
で、sizeof ('\0') == 1
です。 ただし、C と C++ の両方で、次の関係が当てはまります。
sizeof ("\0") == 2
コード分析名: USEOFBYTEAREA
例
この警告が発生するコード例を次に示します。
#include <windows.h>
void f( )
{
int i;
i = sizeof (L"String") * sizeof (WCHAR);
// code ...
}
この警告を解決するには、次のコードを使用します。
#include <windows.h>
void f( )
{
// use divide to calculate how many WCHAR characters are in the string
int i = sizeof (L"String") / sizeof (WCHAR);
// get the number of bytes in the character array
int j = sizeof (L"String");
// code ...
}