共用方式為


C6401

警告 C6401: 在預設地區設定中使用 <function name> 執行與常數字串 < string name> 的不區分大小寫的比較。 在非英文地區設定中產生未預期的結果

這則警告表示指定預設地區設定時,正在執行與常數字串之不區分大小寫的比較。通常要進行的會是與地區設定無關的比較。

這項缺失的常見後果是在非英文之地區設定中產生不正確的行為。 例如,在土耳其文地區設定中,".gif" 會與 ".GIF" 不相符,而在越南文地區設定中,"LogIn" 則與 "LOGIN" 不相符。

CompareString 函式會將地區設定當成引數。然而,在預設地區設定 (例如,常數 LOCALE_USER_DEFAULT) 中傳遞時,則會在不同地區設定中造成不同行為 (視使用者的預設值而定)。 通常,應在與地區設定無關的比較中執行與常數字串的不區分大小寫比較。

若要使用 CompareString 在 Windows XP 上執行與地區設定無關的比較,則第一個參數應該是常數 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