Compartilhar via


_stricmp, _wcsicmp, _mbsicmp, _stricmp_l, _wcsicmp_l, , _mbsicmp_l

Executa uma comparação que não diferencia maiúsculas de minúsculas na cadeia de caracteres.

Importante

_mbsicmp e _mbsicmp_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 _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
);

Parâmetros

string1, string2
Cadeias de caracteres com terminação nula.

locale
Localidade a usar.

Valor retornado

O valor retornado indica a relação de string1 para string2 da seguinte maneira.

Valor retornado Descrição
< 0 string1 é menor que string2
0 string1 é idêntica a string2
> 0 string1 é maior que string2

Se ocorrer um erro, _mbsicmp retorna _NLSCMPERROR, que é definido no <string.h> e no <mbstring.h>.

Comentários

A _stricmp função compara string1 e string2 depois de converter cada caractere em minúsculas e retorna um valor indicando sua relação. _stricmp é diferente de _stricoll que a comparação com _stricmp será afetada somente por LC_CTYPE, que determina quais caracteres são letras maiúsculas e minúsculas. A função _stricoll compara cadeias de caracteres de acordo com ambas as categorias LC_CTYPE e LC_COLLATE de localidade, que inclui o caso e a ordem de ordenação. Para obter mais informações sobre a LC_COLLATE categoria, consulte setlocale Categorias de localidade. As versões dessas funções sem o sufixo _l usam a localidade atual para o comportamento que depende da localidade. As versões com o sufixo são idênticas, com exceção de que usam a localidade passada, em vez da localidade atual. Se a localidade não tiver sido definida, a localidade C será usada. Para obter mais informações, consulte Localidade.

Observação

_stricmp é equivalente a _strcmpi. Podem ser usadas alternadamente, mas _stricmp é o padrão preferencial.

A função _strcmpi é equivalente a _stricmp e é fornecido para fins de compatibilidade com versões anteriores.

Como _stricmp realiza comparações de minúsculas, pode resultar em comportamento inesperado.

Para ilustrar quando a conversão de maiúsculas e minúsculas feita por _stricmp afeta o resultado de uma comparação, suponha que você tem duas cadeias de caracteres JOHNSTON e JOHN_HENRY. A cadeia de caracteres JOHN_HENRY será considerada menor que JOHNSTON porque "_" tem um valor ASCII menor que um S minúsculo. Na verdade, qualquer caractere que tenha um valor no ASCII entre 91 e 96 será considerado menor do que qualquer letra.

Se a função strcmp for usada em vez de _stricmp, JOHN_HENRY será maior que JOHNSTON.

_wcsicmp e _mbsicmp são versões de caracteres largos e de caracteres multibyte de _stricmp. Os argumentos e o valor retornado de _wcsicmp são cadeias de caracteres largos. Os argumentos e o valor retornado de são cadeias de _mbsicmp caracteres multibyte. _mbsicmp reconhece sequências de caracteres multibyte de acordo com a página de código multibyte atual e retorna _NLSCMPERROR em um erro. Para obter mais informações, consulte Páginas de código. Caso contrário, essas três funções se comportam de forma idêntica.

_wcsicmp e wcscmp se comportam de forma idêntica, exceto que wcscmp não converte seus argumentos em minúsculas antes de compará-los. _mbsicmp e _mbscmp se comportam de forma idêntica, exceto que _mbscmp não converte seus argumentos em minúsculas antes de compará-los.

Você precisará pedir setlocale _wcsicmp para trabalhar com caracteres latinos 1. A localidade C está em vigor por padrão, portanto, por exemplo, ä não será comparado igual a Ä. Chamar setlocale com qualquer localidade que não seja a localidade C antes da chamada para _wcsicmp. A amostra a seguir demonstra como _wcsicmp é sensível à localidade:

// 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
}

Uma alternativa é chamar _create_locale, _wcreate_locale e passar o objeto de localidade retornado como um parâmetro para _wcsicmp_l.

Todas essas funções validam seus parâmetros. Se um ou string1 forem string2 ponteiros nulos, o manipulador de parâmetro inválido será chamado, conforme descrito em Validação de parâmetro. Se a execução puder continuar, essas funções retornarão _NLSCMPERROR e definirão errno para EINVAL.

Mapeamentos de rotina de texto genérico

Rotina TCHAR.H _UNICODE e _MBCS não definidos _MBCS definido _UNICODE definido
_tcsicmp _stricmp _mbsicmp _wcsicmp

Requisitos

Rotina Cabeçalho necessário
_stricmp, _stricmp_l <string.h>
_wcsicmp, _wcsicmp_l <string.h> ou <wchar.h>
_mbsicmp, _mbsicmp_l <mbstring.h>

Para obter informações sobre compatibilidade, consulte Compatibilidade.

Exemplo

// 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

Confira também

Manipulação de cadeia de caracteres
memcmp, wmemcmp
_memicmp, _memicmp_l
strcmp, wcscmp, _mbscmp
Funções strcoll
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