다음을 통해 공유


C6328

경고 C6328: 크기가 일치 하지 않습니다: <type> <number> 매개 변수로 전달합니다. 때 <type> <function> 호출에서 필요한

문자 기반 C 런타임 루틴의 패밀리 이름에서에 대 한 isxxx(), 전달 하는 형식의 인수를 char 예기치 않은 결과가 나올 수 있습니다.예를 들어,는 SBCS 또는 MBCS 싱글바이트 문자 형식의 char 보다 큰 값을 가진 0x7F 음수 값이 됩니다.char가 전달되면 컴파일러에서 값을 부호 있는 int 또는 부호 있는 long으로 변환할 수 있습니다.이 값은 컴파일러에 의해 부호 확장될 수 있으므로 예기치 못한 결과가 발생할 수 있습니다.예를 들어, isspace는 int 형식의 인수를 받아들이지만 입력 인수의 올바른 값 범위는 다음과 같습니다.

0 <= c <= 255를 더한 특별 한 값 EOF.

예제

기본적으로 char 부호가 입력 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은 특별히 이 버그를 찾아 내기 위한 것입니다.범위를 벗어난 문자로 종료 및 프로그램 오류를 포함 하면 예기치 않은 결과가 있을 수 있습니다 문자를 7 비트 ASCII 범위에서에 대 한 캐스트가 필요 하지 않습니다.