기본 로캘에서 '함수 이름'을 사용하여 상수 문자열 '문자열 이름'에 대한 대/소문자를 구분하지 않는 비교를 수행합니다. 영어가 아닌 로캘에서 예기치 않은 결과를 생성합니다.
설명
이 경고는 기본 로캘을 지정할 때 상수 문자열에 대한 대/소문자를 구분하지 않는 비교가 수행되고 있음을 나타냅니다. 일반적으로 로캘 독립적 비교를 위한 것이었습니다.
이 결함의 일반적인 결과는 영어가 아닌 로캘에서 잘못된 동작입니다. 예를 들어 터키어에서는 ".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);
}