_stricmp
, _wcsicmp
, _mbsicmp
, _stricmp_l
, , _wcsicmp_l
, _mbsicmp_l
Realiza una comparación de cadenas sin distinción entre mayúsculas y minúsculas.
Importante
_mbsicmp
y _mbsicmp_l
no se pueden usar en aplicaciones que se ejecutan en Windows en tiempo de ejecución. Para obtener más información, vea Funciones de CRT no admitidas en aplicaciones de la Plataforma universal de Windows.
Sintaxis
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
Cadenas terminadas en NULL que se van a comparar.
locale
Configuración regional que se va a usar.
Valor devuelto
El valor devuelto indica la relación entre string1
y string2
como se indica a continuación.
Valor devuelto | Descripción |
---|---|
< 0 | string1 es menor que string2 |
0 | string1 es idéntica a string2 |
> 0 | string1 es mayor que string2 |
Si se produce un error, _mbsicmp
devuelve _NLSCMPERROR
, que se define en <string.h>
y <mbstring.h>
.
Comentarios
La _stricmp
función compara string1
y string2
después de convertir cada carácter en minúsculas y devuelve un valor que indica su relación. _stricmp
difiere de _stricoll
en que la comparación _stricmp
solo se ve afectada por LC_CTYPE
, que determina qué caracteres van en mayúscula y cuáles en minúscula. La función _stricoll
compara las cadenas según las categorías LC_CTYPE
y LC_COLLATE
de la configuración regional, lo que incluye el uso de mayúsculas y minúsculas y el orden de intercalación. Para obtener más información sobre la LC_COLLATE
categoría, vea setlocale
y Categorías de configuración regional. Las versiones de estas funciones sin el sufijo _l
utilizan la configuración regional actual para el comportamiento que depende de la configuración regional. Las versiones con el sufijo son idénticas, salvo que usan la configuración regional que se pasa. Si no se ha establecido la configuración regional, se usa la configuración regional de C. Para obtener más información, vea Locale.
Nota:
_stricmp
equivale a _strcmpi
. Se pueden indistintamente, pero _stricmp
es el estándar preferido.
La función _strcmpi
es equivalente a _stricmp
y se proporciona por razones de compatibilidad con versiones anteriores.
Dado que _stricmp
realiza comparaciones de minúsculas, podría producir un comportamiento inesperado.
Para ilustrar en qué casos la conversión de mayúsculas y minúsculas por parte de _stricmp
afecta al resultado de una comparación, supongamos que se tienen las cadenas JOHNSTON
y JOHN_HENRY
. La cadena JOHN_HENRY
se considera menor que JOHNSTON
porque el carácter "_
" tiene un valor ASCII menor que una S minúscula. De hecho, cualquier carácter que tenga un valor ASCII comprendido entre 91 y 96 se considerará menor que cualquier letra.
Si se usa la función strcmp
en lugar de _stricmp
, JOHN_HENRY
será mayor que JOHNSTON
.
_wcsicmp
y _mbsicmp
son versiones de caracteres anchos y multibyte de _stricmp
. Los argumentos y el valor devuelto de son cadenas de _wcsicmp
caracteres anchos. Los argumentos y el valor devuelto de son cadenas de _mbsicmp
caracteres multibyte. _mbsicmp
reconoce secuencias de caracteres multibyte según la página actual de códigos multibyte y devuelve _NLSCMPERROR
cuando se produce un error. Para obtener más información, vea Páginas de códigos. Estas tres funciones se comportan exactamente igual.
_wcsicmp
y wcscmp
se comportan de forma idéntica, excepto que wcscmp
no convierte sus argumentos en minúsculas antes de compararlos. _mbsicmp
y _mbscmp
se comportan de forma idéntica, excepto que _mbscmp
no convierte sus argumentos en minúsculas antes de compararlos.
Deberá llamar setlocale
a para _wcsicmp
trabajar con caracteres latinos 1. La configuración regional de C está en vigor de forma predeterminada, por lo que, por ejemplo, ä no comparará igual a Ä. Llame a setlocale
con cualquier configuración regional distinta de la configuración regional de C antes de llamar a _wcsicmp
. En el ejemplo siguiente se muestra cómo la configuración regional afecta a _wcsicmp
:
// 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
}
Una alternativa es llamar a _create_locale
, _wcreate_locale
y pasar el objeto de configuración regional devuelto a _wcsicmp_l
como parámetro.
Todas estas funciones validan sus parámetros. Si o string1
string2
son punteros NULOs, se invoca el controlador de parámetros no válidos, como se describe en Validación de parámetros . Si la ejecución puede continuar, estas funciones devuelven _NLSCMPERROR
y establecen errno
en EINVAL
.
Asignaciones de rutinas de texto genérico
Rutina TCHAR.H |
_UNICODE y _MBCS no definidos |
_MBCS definido |
_UNICODE definido |
---|---|---|---|
_tcsicmp |
_stricmp |
_mbsicmp |
_wcsicmp |
Requisitos
Routine | Encabezado necesario |
---|---|
_stricmp , _stricmp_l |
<string.h> |
_wcsicmp , _wcsicmp_l |
<string.h> o <wchar.h> |
_mbsicmp , _mbsicmp_l |
<mbstring.h> |
Para obtener más información sobre compatibilidad, consulte Compatibilidad.
Ejemplo
// 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
Vea también
Manipulación de cadenas
memcmp
, wmemcmp
_memicmp
, _memicmp_l
strcmp
, , wcscmp
, _mbscmp
Funciones 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