strcmp
, wcscmp
, , _mbscmp
_mbscmp_l
Porovnejte řetězce.
Důležité
_mbscmp
a _mbscmp_l
nelze je použít v aplikacích, které se spouští v prostředí Windows Runtime. Další informace najdete v tématu Funkce CRT, které nejsou v aplikacích Univerzální platforma Windows podporované.
Syntaxe
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
Řetězce ukončené hodnotou null, které se mají porovnat.
locale
Národní prostředí, které se má použít.
Vrácená hodnota
Návratová hodnota pro každou z těchto funkcí označuje pořadový vztah string1
k string2
.
Hodnota | string1 Vztah kstring2 |
---|---|
< 0 | string1 je menší než string2 |
0 | string1 je shodná s string2 |
> 0 | string1 je větší než string2 |
Při chybě _mbscmp
ověření parametru a _mbscmp_l
návrat _NLSCMPERROR
, který je definován v <string.h>
a <mbstring.h>
.
Poznámky
Funkce strcmp
provede pořadové porovnání string1
a string2
vrátí hodnotu, která označuje jejich vztah. wcscmp
a _mbscmp
jsou v uvedeném pořadí širokoznakové a vícebajtové verze .strcmp
_mbscmp
rozpozná vícebajtové sekvence znaků podle aktuální vícebajtové znakové stránky a vrátí chybu _NLSCMPERROR
. _mbscmp_l
má stejné chování, ale používá parametr národního prostředí, který se předává místo aktuálního národního prostředí. Další informace najdete v tématu Kódové stránky. string1
Pokud nebo string2
je ukazatel null, _mbscmp
vyvolá neplatnou obslužnou rutinu parametru, jak je popsáno v ověření parametru. Pokud je povoleno pokračovat _mbscmp
provádění a _mbscmp_l
vrátit _NLSCMPERROR
a nastavit errno
na EINVAL
. strcmp
a wcscmp
neověřujte jejich parametry. Tyto funkce se chovají stejně jinak.
Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.
Mapování rutin obecného textu
TCHAR.H rutina |
_UNICODE a _MBCS není definován |
_MBCS definovaný |
_UNICODE definovaný |
---|---|---|---|
_tcscmp |
strcmp |
_mbscmp |
wcscmp |
Funkce strcmp
se liší od strcoll
funkcí v porovnání, které strcmp
jsou řadové a nejsou ovlivněny národním prostředím. strcoll
porovnává řetězce lexicicky pomocí LC_COLLATE
kategorie aktuálního národního prostředí. Další informace o LC_COLLATE
kategorii naleznete v tématu setlocale
, _wsetlocale
.
V národním prostředí "C" je pořadí znaků v znakové sadě (znaková sada ASCII) stejné jako pořadí lexikálních znaků. V jiných národních prostředích se však pořadí znaků v znakové sadě může lišit od lexikálního pořadí. Například v některých evropských národních prostředích je znak "a
" (hodnota 0x61) před znakem "ä
" (hodnota 0xE4) v znakové sadě, ale znak "ä
" je před znakem "a
" lexikograficky.
V národních prostředích, pro které se znaková sada a lexikální pořadí znaků liší, můžete místo pro lexikální porovnání řetězců použít strcoll
strcmp
. Alternativně můžete použít strxfrm
u původních řetězců a pak použít strcmp
výsledné řetězce.
U strcmp
funkcí se rozlišují malá a velká písmena. _stricmp
a porovnejte řetězce tak, _wcsicmp
_mbsicmp
že je nejprve převedete na jejich malá písmena. Dva řetězce, které obsahují znaky, které jsou umístěny mezi "Z" a "a" v tabulce ASCII ('[
, '', '\\
, ']
, '^
, '_
' a '`
' ) porovnávají odlišně v závislosti na jejich případu. Například dva řetězce "ABCDE
" a "ABCD^
" porovnávají jeden způsob, pokud je porovnání malými písmeny ("abcde
" > "abcd^
") a druhým způsobem ("ABCDE
" < "ABCD
^") pokud je porovnání velkými písmeny.
Požadavky
Rutina | Požadovaný hlavičkový soubor |
---|---|
strcmp |
<string.h> |
wcscmp |
<string.h> nebo <wchar.h> |
_mbscmp |
<mbstring.h> |
Další informace o kompatibilitě najdete v tématu Kompatibilita.
Knihovny
Všechny verze knihoven runtime jazyka C.
Příklad
// 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
Viz také
Manipulace s řetězci
memcmp
, wmemcmp
_memicmp
, _memicmp_l
strcoll
– funkce
_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