C6401
upozornění C6401: pomocí < název funkce > ve výchozí národní prostředí provádět case-insensitive porovnání na konstantní řetězec < řetězec názvu >.Neočekávané výsledky v neanglická národní prostředí
Toto upozornění znamená, že case-insensitive porovnání na konstantní řetězec probíhá při určování výchozí národní prostředí; obvykle byla určena národní nezávislé porovnání.
Typické důsledků tohoto nedostatku je nesprávné chování mluvčího neanglická národní prostředí.Například v turecké, "GIF" bude neodpovídají".GIF"; ve vietnamštině "Přihlásit" bude neodpovídají "Přihlásit".
CompareString Funkce má národní prostředí jako argument; však předávání v výchozí národní prostředí, například konstanta LOCALE_USER_DEFAULT, způsobí různé chování v různých národních prostředí, v závislosti na výchozím nastavení uživatele.Obvykle se provádí case-insensitive porovnání proti konstantní řetězec v porovnání nezávislé národní prostředí.
Chcete provést porovnání nezávislé národní prostředí pomocí CompareString v systému Windows XP by měla být první parametr konstantu LOCALE_INVARIANT; například zda testu národní nezávislé pString file1.gif odpovídá ignorování horní a dolní případu rozdíly použít volání, například:
CompareString(LOCALE_INVARIANT,
NORM_IGNORECASE,
pString,
-1,
TEXT("file1.gif"),
-1) == CSTR_EQUAL
Příklad
Následující kód vygeneruje toto upozornění:
include <windows.h>
int fd(char *ext)
{
return (CompareString(LOCALE_USER_DEFAULT,
NORM_IGNORECASE,
ext,
-1,
TEXT("gif"),
-1) == 2);
}
Chcete-li opravit toto upozornění, použijte následující kód:
include <windows.h>
int f(char *ext)
{
return (CompareString(LOCALE_INVARIANT,
NORM_IGNORECASE,
ext,
-1,
TEXT("gif"),
-1) == 2);
}