C6400
upozornění C6400: užití funkce <název funkce> pro porovnání s konstantním řetězcem <název řetězce> bez rozlišování velkých a malých písmen.Podává neočekávané výsledky v neanglických národních prostředích
Toto upozornění znamená, že je prováděno porovnání s konstantním řetězcem bez rozlišování velkých a malých písmen způsobem závislým na národním prostředí, přičemž zjevně bylo zamýšleno porovnání nezávislé na národním prostředí.
Obvyklým důsledkem této vady je nesprávné chování v neanglických národních prostředích.Například v turečtině není ".gif" totéž jako ".GIF"; ve vietnamštině se řetězec "LogIn" neshoduje s řetězcem "LOGIN".
Porovnání řetězců by obvykle měla být prováděna funkcí CompareString.Chcete-li provést porovnání nezávislé na národním prostředí v systému Windows XP, měla by prvním parametrem být konstanta LOCALE_INVARIANT.
Příklad
Následující kód generuje toto upozornění:
#include <windows.h>
int f(char *ext)
{
// code...
return (lstrcmpi(ext, TEXT("gif")) == 0);
}
Chcete-li opravit toto upozornění, proveďte pomocí následujícího kódu test nezávislý na národním prostředí, zda se proměnná char *ext shoduje s řetězcem "gif" bez ohledu na rozdíly ve velkých nebo malých písmenech:
#include <windows.h>
int f(char *ext)
{
// code...
return (CompareString(
LOCALE_INVARIANT,
NORM_IGNORECASE,
ext,
-1,
TEXT ("gif"),
-1) == CSTR_EQUAL);
}