Sdílet prostřednictvím


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);
}

Viz také

Referenční dokumentace

CompareString