Udostępnij za pośrednictwem


C6401

Ostrzeżenie C6401: użycie <function name> dla domyślnych ustawień lokalnych, w celu wykonania porównania, nie uwzględniającego wielkości liter, ze stałym ciągiem <string name>.Daje nieoczekiwane wyniki w ustawieniach lokalnych innych niż angielski

To ostrzeżenie wskazuje, że porównanie stałego ciągu, bez uwzględniania wielkości liter, jest wykonywane podczas określania domyślnych ustawień lokalnych; 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 tureckim ".gif" będzie niezgodne z ".GIF"; w języku wietnamskim "LogIn" będzie niezgodne z "LOGIN".

Funkcja CompareString przyjmuje ustawienia regionalne jako argument; jednakże, przekazanie domyślnych ustawień regionalnych, na przykład stałej LOCALE_USER_DEFAULT, spowoduje różne zachowania w różnych lokalizacjach, w zależności od użytkownika domyślnego.Zazwyczaj porównania nieuwzględniające wielkości liter przeciwko stałemu ciągowi powinno być przeprowadzone za pomocą porównania niezależnego od ustawień regionalnych.

Aby wykonać porównanie niezależne od ustawień regionalnych używając CompareString w systemie Windows XP, pierwszy parametr powinien być stałą LOCALE_INVARIANT; na przykład, aby wykonać test niezależny od ustawień regionalnych dla pString, czy jest dopasowany do file1.gif, ignorując różnice w wielkich/małych literach, należy użyć wywołania, takiego jak:

CompareString(LOCALE_INVARIANT,
              NORM_IGNORECASE,
              pString,
              -1,
              TEXT("file1.gif"),
              -1) == CSTR_EQUAL 

Przykład

Poniższy kod generuje to ostrzeżenie:

include <windows.h>

int fd(char *ext)
{
  return (CompareString(LOCALE_USER_DEFAULT,
                        NORM_IGNORECASE,
                        ext, 
                        -1, 
                        TEXT("gif"),
                        -1) == 2);
}

Aby poprawić to ostrzeżenie, należy użyć następującego kodu:

include <windows.h>
int f(char *ext)
{
  return (CompareString(LOCALE_INVARIANT,
                        NORM_IGNORECASE,
                        ext, 
                        -1, 
                        TEXT("gif"),
                        -1) == 2);

}

Zobacz też

Informacje

CompareString