Compartir a través de


_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 _strcmpies equivalente a _stricmpy 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