_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