strcmp
, , wcscmp
, , _mbscmp
_mbscmp_l
Porównaj ciągi.
Ważne
_mbscmp
nie można jej _mbscmp_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 strcmp(
const char *string1,
const char *string2
);
int wcscmp(
const wchar_t *string1,
const wchar_t *string2
);
int _mbscmp(
const unsigned char *string1,
const unsigned char *string2
);
int _mbscmp_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 dla każdej z tych funkcji wskazuje porządkową relację z wartością string1
string2
.
Wartość | Relacja z string1 string2 |
---|---|
< 0 | string1 jest mniejsza niż string2 |
0 | string1 jest identyczny z string2 |
> 0 | string1 jest większe niż string2 |
W przypadku błędu sprawdzania poprawności parametru _mbscmp
i _mbscmp_l
zwróć wartość _NLSCMPERROR
, która jest zdefiniowana w elementy <string.h>
i <mbstring.h>
.
Uwagi
Funkcja strcmp
wykonuje porządkowe porównanie string1
i string2
zwraca wartość wskazującą ich relację. wcscmp
i _mbscmp
są odpowiednio wersjami znaków wielobajtowych i wielobajtowych .strcmp
_mbscmp
rozpoznaje sekwencje wielobajtowe według bieżącej strony kodu wielobajtowego i zwraca błąd _NLSCMPERROR
. _mbscmp_l
ma to samo zachowanie, ale używa parametru ustawień regionalnych, który jest przekazywany zamiast bieżących ustawień regionalnych. Aby uzyskać więcej informacji, zobacz Strony kodu. Ponadto, jeśli string1
lub string2
jest wskaźnikiem null, _mbscmp
wywołuje nieprawidłową procedurę obsługi parametrów zgodnie z opisem w temacie Weryfikacja parametrów. Jeśli wykonywanie jest dozwolone do kontynuowania, _mbscmp
i zwracanie _mbscmp_l
_NLSCMPERROR
i ustawianie wartości errno
.EINVAL
strcmp
i wcscmp
nie weryfikuj ich parametrów. Te funkcje zachowują się identycznie inaczej.
Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.
Mapowania procedur tekstu ogólnego
TCHAR.H rutyna |
_UNICODE i _MBCS niezdefiniowane |
_MBCS zdefiniowany |
_UNICODE zdefiniowany |
---|---|---|---|
_tcscmp |
strcmp |
_mbscmp |
wcscmp |
Funkcje strcmp
różnią się od strcoll
funkcji w tych strcmp
porównaniach porządkowych i nie mają wpływu na ustawienia regionalne. strcoll
porównuje ciągi leksykograficznie przy użyciu LC_COLLATE
kategorii bieżących ustawień regionalnych. Aby uzyskać więcej informacji na temat LC_COLLATE
kategorii, zobacz setlocale
, _wsetlocale
.
W ustawieniach regionalnych "C" kolejność znaków w zestawie znaków (zestaw znaków ASCII) jest taka sama jak kolejność znaków leksykograficznych. Jednak w innych ustawieniach regionalnych kolejność znaków w zestawie znaków może różnić się od kolejności leksykograficznej. Na przykład w niektórych europejskich ustawieniach regionalnych znak "a
" (wartość 0x61) występuje przed znakiem "ä
" (wartość 0xE4) w zestawie znaków, ale znak "ä
" jest przed znakiem "a
" leksykograficznie.
W ustawieniach regionalnych, dla których zestaw znaków i kolejność znaków leksykograficznej różnią się, można użyć strcoll
zamiast strcmp
do porównania leksykograficznego ciągów. Alternatywnie można użyć strxfrm
w oryginalnych ciągach, a następnie użyć strcmp
w ciągach wynikowych.
W strcmp
funkcjach jest rozróżniana wielkość liter. _stricmp
, _wcsicmp
i _mbsicmp
porównaj ciągi, najpierw konwertując je na małe litery. Dwa ciągi zawierające znaki znajdujące się między znakami "Z" i "a" w tabeli ASCII ("[
, "", "\\
", "]
^
", "_
" i "`
") są porównywane inaczej, w zależności od ich przypadku. Na przykład dwa ciągi "ABCDE
" i "ABCD^
" porównują jeden sposób, jeśli porównanie ma małe litery ("" > "abcde
abcd^
") i drugą stronę ("ABCDE
" < "ABCD
^"), jeśli porównanie jest wielkie.
Wymagania
Procedura | Wymagany nagłówek |
---|---|
strcmp |
<string.h> |
wcscmp |
<string.h> lub <wchar.h> |
_mbscmp |
<mbstring.h> |
Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.
Biblioteki
Wszystkie wersje bibliotek czasu wykonywania języka C.
Przykład
// crt_strcmp.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
strcoll
, funkcje
_stricmp
, , _wcsicmp
, _mbsicmp
, _stricmp_l
, , _wcsicmp_l
_mbsicmp_l
strncmp
, , wcsncmp
, , _mbsncmp
_mbsncmp_l
_strnicmp
, , _wcsnicmp
, _mbsnicmp
, _strnicmp_l
, , _wcsnicmp_l
_mbsnicmp_l
strrchr
, , wcsrchr
, , _mbsrchr
_mbsrchr_l
strspn
, , wcsspn
, , _mbsspn
_mbsspn_l
strxfrm
, , wcsxfrm
, , _strxfrm_l
_wcsxfrm_l