C6400
更新 : 2007 年 11 月
警告 C6400: <関数名> が、定数文字列 <文字列名> と大文字と小文字を区別しないで比較するために使用されています。英語でないロケールで予期しない結果が生成されます
この警告は、ロケールに依存しない比較を意図している場合に、ロケールに依存する方法で定数文字列と大文字小文字を区別しない比較が行われていることを示します。
この問題は、通常、英語以外の言語が使われるロケールで不適切な動作を引き起こします。たとえば、トルコ語では ".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);
}