在預設地區設定中使用 『function name』 來執行不區分大小寫的比較常數位符串 『string name』。 在非英文地區設定中產生非預期的結果
備註
這個警告表示指定預設地區設定時,正在完成常數位符串的不區分大小寫比較。 通常,地區設定無關的比較是預定的。
此缺陷的一般後果是非英文地區設定的行為不正確。 例如,在土耳其文中,「.gif」 不符合 「.GIF」;在越南文中,“LookUp” 與 “LOOKUP” 不符。
函 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
程式碼分析名稱: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);
}