strcmp
, wcscmp
, _mbscmp
, _mbscmp_l
Compare cadeias de caracteres.
Importante
_mbscmp
e _mbscmp_l
não podem ser usados em aplicativos executados no Windows Runtime. Para obter mais informações, confira Funções do CRT sem suporte em aplicativos da Plataforma Universal do Windows.
Sintaxe
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
);
Parâmetros
string1
, string2
Cadeias de caracteres com terminação nula.
locale
Localidade a usar.
Valor retornado
O valor retornado para cada uma dessas funções indica a relação ordinal de string1
para string2
.
Valor | Relação de string1 com string2 |
---|---|
< 0 | string1 é menor que string2 |
0 | string1 é idêntico a string2 |
> 0 | string1 é maior que string2 |
Em um erro de validação de parâmetro, _mbscmp
e _mbscmp_l
retornam _NLSCMPERROR
, que é definido em <string.h>
e <mbstring.h>
.
Comentários
A função strcmp
realiza uma comparação ordinal de string1
e string2
e retorna um valor que indica a relação entre eles. wcscmp
e _mbscmp
são, respectivamente, versões de caracteres largos e de caracteres multibyte de strcmp
. _mbscmp
reconhece sequências de caracteres multibyte de acordo com a página de código multibyte atual e retorna _NLSCMPERROR
em um erro. _mbscmp_l
tem o mesmo comportamento, mas usa o parâmetro de localidade que é passado em vez da localidade atual. Para obter mais informações, consulte Páginas de código. Além disso, se string1
ou string2
for um ponteiro nulo, _mbscmp
invocará o manipulador de parâmetro inválido, conforme descrito em Validação de parâmetro. Se a execução tiver permissão para continuar, _mbscmp
e _mbscmp_l
retornarão _NLSCMPERROR
e definirão errno
como EINVAL
. strcmp
e wcscmp
não validam seus parâmetros. Caso contrário, essas funções se comportam de forma idêntica.
Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar esse comportamento, confira Estado global no CRT.
Mapeamentos de rotina de texto genérico
Rotina TCHAR.H |
_UNICODE e _MBCS não definidos |
_MBCS definido |
_UNICODE definido |
---|---|---|---|
_tcscmp |
strcmp |
_mbscmp |
wcscmp |
As strcmp
funções diferem das funções em que strcmp
as strcoll
comparações são ordinais e não são afetadas pela localidade. strcoll
compara cadeias de caracteres lexicograficamente usando a categoria LC_COLLATE
da localidade atual. Para obter mais informações sobre a categoria LC_COLLATE
, confira setlocale
, _wsetlocale
.
Na localidade "C", a ordem de caracteres no conjunto de caracteres (conjunto de caracteres ASCII) é a mesma que a ordem lexicográfica de caracteres. No entanto, em outras localidades, a ordem de caracteres no conjunto de caracteres pode ser diferente da ordem lexicográfica. Por exemplo, em algumas localidades europeias, o caractere 'a
' (valor 0x61) precede o caractere 'ä
' (valor 0xE4) no conjunto de caracteres, mas o caractere 'ä
' precede a caractere 'a
' lexicograficamente.
Em localidades para as quais o conjunto de caracteres e a ordem lexicográfica dos caracteres são diferentes, você pode usar strcoll
em vez de strcmp
para comparação lexicográfica de cadeias de caracteres. Como alternativa, você pode usar strxfrm
em cadeias de caracteres originais e então usar strcmp
nas cadeias de caracteres resultantes.
As funções strcmp
diferenciam maiúsculas de minúsculas. _stricmp
, _wcsicmp
e _mbsicmp
comparam cadeias de caracteres pelo primeiro convertê-las em seus formulários em minúsculas. Duas cadeias de caracteres que contêm caracteres localizados entre 'Z' e 'a' na tabela ASCII ('[
', '\\
', ']
', '^
', '_
' e '`
') são comparadas de modo diferente, dependendo das maiúsculas e minúsculas delas. Por exemplo, as duas cadeias de caracteres "ABCDE
" and "ABCD^
" são comparadas de uma forma se a comparação é minúscula ("abcde
" > "abcd^
") e de outra forma ("ABCDE
" < "ABCD
") se a comparação for em maiúsculas.
Requisitos
Rotina | Cabeçalho necessário |
---|---|
strcmp |
<string.h> |
wcscmp |
<string.h> ou <wchar.h> |
_mbscmp |
<mbstring.h> |
Para obter informações sobre compatibilidade, consulte Compatibilidade.
Bibliotecas
Todas as versões das bibliotecas em tempo de execução C.
Exemplo
// 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
Confira também
Manipulação de cadeia de caracteres
memcmp
, wmemcmp
_memicmp
, _memicmp_l
Funções strcoll
_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