_stricmp
, , _wcsicmp
, _mbsicmp
, _stricmp_l
, , _wcsicmp_l
_mbsicmp_l
Wykonuje porównanie ciągów bez uwzględniania wielkości liter.
Ważne
_mbsicmp
nie 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 _NLSCMPERROR
wartość , 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_CTYPE
element , 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
.
_wcsicmp
i _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ć _wcsicmp
dowolne 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_locale
metody 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