Share via


C6401

경고 C6401: 기본 로캘에서 <function name>을(를) 사용하여 상수 문자열 <string name>에 대해 대/소문자를 구분하지 않는 비교를 수행하고 있습니다. 영어가 아닌 로캘에서는 예기치 않은 결과가 발생할 수 있습니다.

이 경고는 일반적으로 로캘에 독립적인 비교를 수행하려고 하는데 기본 로캘을 지정하면서 상수 문자열에 대해 대/소문자를 구분하지 않는 비교를 수행하고 있음을 나타냅니다.

일반적으로 이 오류는 영어권이 아닌 로캘에서 잘못된 동작을 발생시킬 수 있습니다. 예를 들어, 터키어의 경우 ".gif"가 ".GIF"와 일치하지 않으며 베트남어의 경우 "LogIn"이 "LOGIN"과 일치하지 않습니다.

CompareString 함수는 로캘을 인수로 사용합니다. 하지만 상수 LOCALE_USER_DEFAULT와 같이 기본 로캘에서 전달하는 경우 사용자의 기본값에 따라 로캘마다 서로 다른 동작이 수행될 수 있습니다. 일반적으로 상수 문자열에 대한 대/소문자를 구분하지 않는 비교는 로캘에 독립적인 비교를 수행해야 합니다.

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

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

예제

다음 코드에서는 이 경고를 발생시킵니다.

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