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

请参见

参考

CompareString