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.

Retornar valor

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âmetros 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, consulte Estado global na 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