C6400
警告 C6400: 使用 <function name> 執行與常數字串 <string name> 的不區分大小寫的比較。在非英文地區設定中產生未預期的結果
這則警告指出在明確要進行與地區設定無關的比較時,卻以地區設定相關方式執行與常數字串之不區分大小寫的比較。
這項缺失的常見後果是在非英文之地區設定中產生不正確的行為。例如,在土耳其文地區設定中,".gif" 會與 ".GIF" 不相符,而在越南文地區設定中,"LogIn" 則與 "LOGIN" 不相符。
字串比較通常應該會以 CompareString 函式執行。若要在 Windows XP 上執行與地區設定無關的比較,第一個參數應該是常數 LOCALE_INVARIANT。
範例
下列程式碼將產生出這個警告:
#include <windows.h>
int f(char *ext)
{
// code...
return (lstrcmpi(ext, TEXT("gif")) == 0);
}
若要更正這則警告,請使用下列程式碼,執行與地區設定無關的測試,在忽略大小寫區分的情況下比較 char *ext 是否與 "gif" 相符:
#include <windows.h>
int f(char *ext)
{
// code...
return (CompareString(
LOCALE_INVARIANT,
NORM_IGNORECASE,
ext,
-1,
TEXT ("gif"),
-1) == CSTR_EQUAL);
}