C6401
Avertissement C6401 : utilisation de <nom de fonction> dans les paramètres régionaux par défaut en vue d'effectuer une comparaison ne tenant pas compte de la casse avec la chaîne constante <nom de chaîne>.Donne des résultats inattendus avec les paramètres régionaux autres que l'anglais
Cet avertissement indique qu'une comparaison ne respectant pas la casse avec une chaîne constante est effectuée lors de la spécification des paramètres régionaux par défaut ; une comparaison indépendante des paramètres régionaux est généralement prévue.
La conséquence classique de ce défaut est un comportement incorrect des paramètres régionaux autres que l'anglais.Par exemple, ".gif" ne correspond pas à ".GIF" en turc ; "LogIn" ne correspond pas à "LOGIN" en vietnamien.
La fonction CompareString accepte des paramètres régionaux comme argument ; toutefois, le passage des paramètres régionaux par défaut, par exemple, la constante LOCALE_USER_DEFAULT, provoque des comportements différents dans des paramètres régionaux différents, selon la valeur par défaut de l'utilisateur.En général, les comparaisons ne respectant pas la casse avec une chaîne constante doivent être effectuées dans une comparaison indépendante des paramètres régionaux.
Pour effectuer une comparaison indépendante des paramètres régionaux à l'aide de CompareString sur Windows XP, le premier paramètre doit être la constante LOCALE_INVARIANT ; par exemple, pour exécuter un test indépendant des paramètres régionaux pour déterminer si pString correspond à file1.gif en ignorant les différences de casse entre les majuscules et les minuscules, utilisez un appel tel que :
CompareString(LOCALE_INVARIANT,
NORM_IGNORECASE,
pString,
-1,
TEXT("file1.gif"),
-1) == CSTR_EQUAL
Exemple
Le code suivant génère cet avertissement :
include <windows.h>
int fd(char *ext)
{
return (CompareString(LOCALE_USER_DEFAULT,
NORM_IGNORECASE,
ext,
-1,
TEXT("gif"),
-1) == 2);
}
Pour corriger cet avertissement, utilisez le code suivant :
include <windows.h>
int f(char *ext)
{
return (CompareString(LOCALE_INVARIANT,
NORM_IGNORECASE,
ext,
-1,
TEXT("gif"),
-1) == 2);
}