警告 C6401

在預設地區設定中使用 『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);
}

另請參閱

CompareString