次の方法で共有


C6328

警告 C6328: サイズの不一致です: <型> が、呼び出しに機能するために < < 必要なときにパラメーターとして渡された <型> 番号 > >

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

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

使用例

既定で、char は Visual C++ の signed 型なので、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 の目的は、このバグをキャッチすることです。7 ビット ASCII 範囲の文字にキャストはプログラム エラー以前の範囲、予測できない結果になることがあります。不要または外側と終了文字ではありません。