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);
}