次の方法で共有


C6328

警告 C6328: サイズの不一致です: <type> は <number> パラメーターとして <type> が <function>の呼び出しに要求されたときに渡された

姓 isxxxの 15()B のランタイム文字ベースのルーチンには、型 char 引数を渡すことが予測できない結果になることがあります。たとえば、0x7F より大きい値を持つ型 char の SBCS または MBCS バイト文字は負の値です。char が渡されると、コンパイラはその値を符号付き int または符号付き long に変換します。この値は、コンパイラによって符号拡張されることがあり、予想外の結果になることがあります。たとえば、isspace は int 型の引数を受け取りますが、その入力引数の有効な値の範囲は次のようになります。

特殊な値 EOFと0 <= c <= 255。

使用例

既定では、char は signed 型です。Visual C++ をため、char 型の変数の値の範囲は -128 <= c <= 127です。次のコードを使用するとします。

#include <iostream>

void f( )
{
    char c = -37;
    int retVal = isspace( c );
    // code ...
}

この場合、c は値 -37 の符号付き int に符号拡張されます。これは isspace の有効範囲外です。

この問題を解決するには、次のコードに示すように static_castを使用できます:

#include <iostream>

void f( )
{
    char c = -37;
    int retVal = isspace( static_cast<unsigned char> (c) );
    // code ...
}

警告 C6328 の目的は、このバグをキャッチすることです。bit 7 の ASCII 範囲の文字にキャストはプログラムの違反次に、範囲、予測できない結果になることがある不要な文字、および終了の外部ではありません。