C6401
Aviso C6401: Usando < nome da função > em um código de idioma padrão para realizar uma comparação não diferencia maiúsculas de minúsculas como seqüência de caracteres constante < nome de seqüência de caracteres >.Produz resultados inesperados em localidades inglês
Este aviso indica que um caso-diferenciação de comparação para uma seqüência de caracteres constante está sendo executada ao especificar a localidade padrão; geralmente, uma comparação independente de localidade foi criada.
A conseqüência típica esse defeito é um comportamento incorreto em localidades fala inglês.Por exemplo, em turco, ".gif" não coincidirá ".GIF"; em vietnamita, "LogIn" não coincidirá "LOGIN".
The CompareString função usa uma localidade sistema autônomo um argumento; no entanto, passando uma localidade padrão, por exemplo, a constante LOCALE_USER_DEFAULT, fará com que diferentes comportamentos em locais diferentes, dependendo do padrão do usuário. Normalmente, caso-kana comparações em relação a uma seqüência de caracteres constante devem ser executadas em uma comparação independente de localidade.
Para realizar uma comparação 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 correspondências file1.gif ignorar diferenças de maiúsculas superior/inferior, use uma telefonar sistema autônomo:
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);
}