C6401
Aviso C6401: Usando o < nome da função > em uma localidade padrão para executar um comparar maiúsculas e minúsculas para string constante < o nome de seqüência de caracteres >. Produz resultados inesperados em localidades do inglês
Este aviso indica que está sendo executada uma comparação entre maiúsculas e minúsculas para uma seqüência de caracteres constante ao especificar a localidade padrão; Normalmente, uma comparação independente de localidade foi criada.
A conseqüência típica Esse defeito é um comportamento incorreto em localidades de fala inglês. Por exemplo, em turco, ". gif" não haverá correspondência ".GIF"; No vietnamita, "LogIn" não corresponderão "LOGIN".
O CompareString função pega uma localidade como um argumento; No entanto, passando uma localidade padrão, por exemplo, a constante LOCALE_USER_DEFAULT, fará com que os comportamentos diferentes em locais diferentes, dependendo padrão. do usuário Normalmente, diferencia maiúsculas de minúsculas comparações em relação a uma seqüência de caracteres constante devem ser executadas em uma comparação independente de localidade.
Para executar uma comparação de independente de localidade usando CompareString no Windows XP, o primeiro parâmetro deve ser a constante LOCALE_INVARIANT; Por exemplo, para executar um teste independente de localidade para se pString file1.gif de correspondências, ignorando as diferenças de maiúsculas e minúsculas, use uma chamada como:
CompareString(LOCALE_INVARIANT,
NORM_IGNORECASE,
pString,
-1,
TEXT("file1.gif"),
-1) == CSTR_EQUAL
Exemplo
O código a seguir gera este aviso:
include <windows.h>
int fd(char *ext)
{
return (CompareString(LOCALE_USER_DEFAULT,
NORM_IGNORECASE,
ext,
-1,
TEXT("gif"),
-1) == 2);
}
Para corrigir esse aviso, use o seguinte código:
include <windows.h>
int f(char *ext)
{
return (CompareString(LOCALE_INVARIANT,
NORM_IGNORECASE,
ext,
-1,
TEXT("gif"),
-1) == 2);
}