경고 C6401

기본 로캘에서 '함수 이름'을 사용하여 상수 문자열 '문자열 이름'에 대한 대/소문자를 구분하지 않는 비교를 수행합니다. 영어가 아닌 로캘에서 예기치 않은 결과를 생성합니다.

설명

이 경고는 기본 로캘을 지정할 때 상수 문자열에 대한 대/소문자를 구분하지 않는 비교가 수행되고 있음을 나타냅니다. 일반적으로 로캘 독립적 비교를 위한 것이었습니다.

이 결함의 일반적인 결과는 영어가 아닌 로캘에서 잘못된 동작입니다. 예를 들어 터키어에서는 ".gif"이 ".GIF"을(를) 일치하지 않습니다. 베트남어에서는 "LookUp"이 "LOOKUP"에 맞지 않습니다.

함수는 CompareString 로캘을 인수로 사용합니다. 그러나 기본 로캘(예: 상 LOCALE_USER_DEFAULT수)을 전달하면 사용자의 기본값에 따라 다른 로캘에서 다른 동작이 발생합니다. 일반적으로 상수 문자열에 대한 대/소문자를 구분하지 않는 비교는 로캘 독립적 비교에서 수행해야 합니다.

Windows XP에서 로캘 독립적 비교를 CompareString 수행하려면 첫 번째 매개 변수가 상수 LOCALE_INVARIANT여야 합니다. 예를 들어 대/소문자 차이를 무시하고 일치하는지 file1.gif pString 대한 로캘 독립적 테스트를 수행하려면 다음과 같은 호출을 사용합니다.

CompareString(LOCALE_INVARIANT,
              NORM_IGNORECASE,
              pString,
              -1,
              TEXT("file1.gif"),
              -1) == CSTR_EQUAL

코드 분석 이름: DEFAULT_LOCALE_CONSTANT_STRING_COMPARISON

예시

다음 코드는 이 경고를 생성합니다.

include <windows.h>

int fd(char *ext)
{
  return (CompareString(LOCALE_USER_DEFAULT,
                        NORM_IGNORECASE,
                        ext,
                        -1,
                        TEXT("gif"),
                        -1) == 2);
}

이 경고를 수정하려면 다음 코드를 사용합니다.

include <windows.h>
int f(char *ext)
{
  return (CompareString(LOCALE_INVARIANT,
                        NORM_IGNORECASE,
                        ext,
                        -1,
                        TEXT("gif"),
                        -1) == 2);
}

참고 항목

CompareString