C6400
Ostrzeżenie C6400: Użycie funkcji <nazwa funkcji> aby wykonać operację porównania bez uwzględniania wielkości liter dla stałego ciągu <nazwa ciągu>.Daje nieoczekiwane wyniki w ustawieniach lokalnych innych niż angielski
To ostrzeżenie wskazuje, że porównania bez uwzględniania wielkości liter stałego ciągu jest wykonywane w sposób zależny od ustawień regionalnych, gdy najwyraźniej miało zostać wykonane porównanie niezależne od ustawień regionalnych.
Typową konsekwencją tej wady jest nieprawidłowe zachowanie ustawień regionalnych innych niż angielskie.Na przykład w tureckich ".gif" będzie niezgodne z ".GIF"; w języku wietnamskim "LogIn" będzie niezgodne z "LOGIN".
Porównywanie ciągów zazwyczaj należy wykonywać za pomocą funkcji CompareString.Aby przeprowadzić porównanie niezależne od ustawień regionalnych w systemie Windows XP, pierwszy parametr powinien być wartością stałą LOCALE_INVARIANT.
Przykład
Poniższy kod generuje to ostrzeżenie:
#include <windows.h>
int f(char *ext)
{
// code...
return (lstrcmpi(ext, TEXT("gif")) == 0);
}
Aby poprawić to ostrzeżenie, należy wykonać test niezależny od ustawień regionalnych sprawdzający czy znak *ext pasuje do "gif" ignorując wielkość liter, należy użyć następującego kodu:
#include <windows.h>
int f(char *ext)
{
// code...
return (CompareString(
LOCALE_INVARIANT,
NORM_IGNORECASE,
ext,
-1,
TEXT ("gif"),
-1) == CSTR_EQUAL);
}