Udostępnij za pośrednictwem


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

Zobacz też

Informacje

CompareString