Udostępnij za pośrednictwem


_stricmp, , _wcsicmp, _mbsicmp, _stricmp_l, , _wcsicmp_l_mbsicmp_l

Wykonuje porównanie ciągów bez uwzględniania wielkości liter.

Ważne

_mbsicmpnie można jej _mbsicmp_l używać w aplikacjach wykonywanych w środowisko wykonawcze systemu Windows. Aby uzyskać więcej informacji, zobacz Funkcje CRT nieobsługiwane w aplikacjach platforma uniwersalna systemu Windows.

Składnia

int _stricmp(
   const char *string1,
   const char *string2
);
int _wcsicmp(
   const wchar_t *string1,
   const wchar_t *string2
);
int _mbsicmp(
   const unsigned char *string1,
   const unsigned char *string2
);
int _stricmp_l(
   const char *string1,
   const char *string2,
   _locale_t locale
);
int _wcsicmp_l(
   const wchar_t *string1,
   const wchar_t *string2,
   _locale_t locale
);
int _mbsicmp_l(
   const unsigned char *string1,
   const unsigned char *string2,
   _locale_t locale
);

Parametry

string1, string2
Ciągi zakończone wartością null do porównania.

locale
Ustawienia regionalne do użycia.

Wartość zwracana

Wartość zwracana wskazuje relację z string1 string2 w następujący sposób.

Wartość zwracana opis
< 0 string1 mniejsze niż string2
0 string1 identyczne z string2
> 0 string1 większe niż string2

W przypadku błędu _mbsicmp zwraca _NLSCMPERRORwartość , która jest zdefiniowana w elementach <string.h> i <mbstring.h>.

Uwagi

Funkcja _stricmp porównuje string1 i string2 po przekonwertowaniu każdego znaku na małe litery i zwraca wartość wskazującą ich relację. _stricmp różni się od _stricoll tego, że _stricmp porównanie ma wpływ tylko na LC_CTYPEelement , który określa, które znaki są wielkie i małe. Funkcja _stricoll porównuje ciągi zarówno według kategorii ustawień regionalnych, jak LC_CTYPE i LC_COLLATE , które obejmują zarówno wielkość liter, jak i kolejność sortowania. Aby uzyskać więcej informacji na temat LC_COLLATE kategorii, zobacz setlocale i Kategorie ustawień regionalnych. Wersje tych funkcji bez sufiksu _l używają bieżących ustawień regionalnych dla zachowania zależnego od ustawień regionalnych. Wersje z sufiksem są identyczne, z tą różnicą, że używają ustawień regionalnych przekazanych w zamian. Jeśli ustawienia regionalne nie zostały ustawione, używane są ustawienia regionalne języka C. Aby uzyskać więcej informacji, zobacz Ustawienia regionalne.

Uwaga

_stricmp jest równoważne z _strcmpi. Można ich używać zamiennie, ale _stricmp jest preferowanym standardem.

Funkcja jest równoważna _strcmpi _stricmp i jest udostępniana tylko w celu zapewnienia zgodności z poprzednimi wersjami.

Ponieważ _stricmp porównanie małych liter może spowodować nieoczekiwane zachowanie.

Aby zilustrować, kiedy konwersja _stricmp wielkości liter wpływa na wynik porównania, załóżmy, że masz dwa ciągi JOHNSTON i JOHN_HENRY. Ciąg JOHN_HENRY będzie traktowany jako mniejszy niż JOHNSTON , ponieważ "_" ma niższą wartość ASCII niż małe litery S. W rzeczywistości każdy znak, który ma wartość ASCII z zakresu od 91 do 96, będzie traktowany jako mniejszy niż dowolna litera.

strcmp Jeśli funkcja jest używana zamiast _stricmp, JOHN_HENRY będzie większa niż JOHNSTON.

_wcsicmpi _mbsicmp są wersjami znaków wielobajtowych i wielobajtowych ._stricmp Argumenty i wartość zwracana _wcsicmp wartości to ciągi wieloznakowe. Argumenty i wartość zwracana wartości to ciągi wielobajtowe _mbsicmp znaków. _mbsicmp rozpoznaje sekwencje wielobajtowe według bieżącej strony kodu wielobajtowego i zwraca błąd _NLSCMPERROR . Aby uzyskać więcej informacji, zobacz Strony kodu. Te trzy funkcje zachowują się identycznie inaczej.

_wcsicmp i wcscmp zachowują się identycznie, z tą różnicą, że wcscmp nie konwertuje argumentów na małe litery przed ich porównaniem. _mbsicmp i _mbscmp zachowują się identycznie, z tą różnicą, że _mbscmp nie konwertuje argumentów na małe litery przed ich porównaniem.

Musisz wywołać metodę setlocale _wcsicmp , aby pracować z łacińskimi 1 znakami. Ustawienia regionalne języka C są domyślnie obowiązujące, więc na przykład ä nie będzie porównywana z wartością Ä. Przed wywołaniem wywołania należy wywołać _wcsicmpdowolne setlocale ustawienia regionalne inne niż ustawienia regionalne języka C. W poniższym przykładzie pokazano, jak _wcsicmp jest wrażliwy na ustawienia regionalne:

// crt_stricmp_locale.c
By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md).

#include <string.h>
#include <stdio.h>
#include <locale.h>

int main() {
   setlocale(LC_ALL,"C");   // in effect by default
   printf("\n%d",_wcsicmp(L"ä", L"Ä"));   // compare fails
   setlocale(LC_ALL,"");
   printf("\n%d",_wcsicmp(L"ä", L"Ä"));   // compare succeeds
}

Alternatywą jest wywołanie _create_localemetody i _wcreate_locale przekazanie zwróconego obiektu ustawień regionalnych jako parametru do _wcsicmp_l.

Wszystkie te funkcje weryfikują swoje parametry. Jeśli wskaźniki string1 string2 mają wartość null, wywoływana jest nieprawidłowa procedura obsługi parametrów, zgodnie z opisem w temacie Weryfikacja parametru . Jeśli wykonanie jest dozwolone do kontynuowania, te funkcje zwracają _NLSCMPERROR i ustawiają wartość errno EINVAL.

Mapowania procedur tekstu ogólnego

TCHAR.H rutyna _UNICODE i _MBCS niezdefiniowane _MBCS zdefiniowany _UNICODE zdefiniowany
_tcsicmp _stricmp _mbsicmp _wcsicmp

Wymagania

Procedura Wymagany nagłówek
_stricmp, _stricmp_l <string.h>
_wcsicmp, _wcsicmp_l <string.h> lub <wchar.h>
_mbsicmp, _mbsicmp_l <mbstring.h>

Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Przykład

// crt_stricmp.c

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

char string1[] = "The quick brown dog jumps over the lazy fox";
char string2[] = "The QUICK brown dog jumps over the lazy fox";

int main( void )
{
   char tmp[20];
   int result;

   // Case sensitive
   printf( "Compare strings:\n   %s\n   %s\n\n", string1, string2 );
   result = strcmp( string1, string2 );
   if( result > 0 )
      strcpy_s( tmp, _countof(tmp), "greater than" );
   else if( result < 0 )
      strcpy_s( tmp, _countof(tmp), "less than" );
   else
      strcpy_s( tmp, _countof(tmp), "equal to" );
   printf( "   strcmp:   String 1 is %s string 2\n", tmp );

   // Case insensitive (could use equivalent _stricmp)
   result = _stricmp( string1, string2 );
   if( result > 0 )
      strcpy_s( tmp, _countof(tmp), "greater than" );
   else if( result < 0 )
      strcpy_s( tmp, _countof(tmp), "less than" );
   else
      strcpy_s( tmp, _countof(tmp), "equal to" );
   printf( "   _stricmp:  String 1 is %s string 2\n", tmp );
}
Compare strings:
   The quick brown dog jumps over the lazy fox
   The QUICK brown dog jumps over the lazy fox

   strcmp:   String 1 is greater than string 2
   _stricmp:  String 1 is equal to string 2

Zobacz też

Manipulowanie ciągami
memcmp, wmemcmp
_memicmp, _memicmp_l
strcmp, , wcscmp_mbscmp
strcoll, funkcje
strncmp, , wcsncmp, , _mbsncmp_mbsncmp_l
_strnicmp, , _wcsnicmp, _mbsnicmp, _strnicmp_l, , _wcsnicmp_l_mbsnicmp_l
strrchr, , wcsrchr, , _mbsrchr_mbsrchr_l
_strset, , _strset_l, _wcsset, _wcsset_l, , _mbsset_mbsset_l
strspn, , wcsspn, , _mbsspn_mbsspn_l