_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 más información, vea Funciones de CRT no admitidas con /ZW.

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 menor que string2

0

string1 idéntico a string2

> 0

string1 mayor que string2

En caso de error, _mbsicmp devuelve _NLSCMPERROR, que se define en <string.h> y <mbstring.h>.

Comentarios

La función _stricmp realiza una comparación ordinal de string1 y string2 después de convertir cada carácter a 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 categoría LC_COLLATE, 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 el parámetro de configuración regional que se pasa. Si no se ha establecido la configuración regional, se utiliza la configuración regional de C. Para obtener más información, consulta Configuración regional.

Nota

_stricmp es equivalente 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 “_” tiene un valor ASCII menor que una S minúscula. De hecho, cualquier carácter que tenga un valor ASCII entre 91 y 96 se considera 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 _wcsicmp son cadenas de caracteres anchos; los de _mbsicmp son cadenas de 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 exactamente igual, salvo que wcscmp no convierte los argumentos en minúsculas antes de compararlos. _mbsicmp y _mbscmp se comportan exactamente igual, salvo que _mbscmp no convierte los argumentos en minúsculas antes de compararlos.

Debe llamar a setlocale para que _wcsicmp funcione con los caracteres de Latino 1. La configuración regional de C está activada de forma predeterminada, de modo que, por ejemplo, ä no se considera 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
#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 string1 o 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 rutina de texto genérico

Rutina TCHAR.H

_UNICODE y _MBCS no definidos

_MBCS definido

_UNICODE definido

_tcsicmp

_stricmp

_mbsicmp

_wcsicmp

Requisitos

Rutina

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, vea 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 );
}
  

Equivalente en .NET Framework

System::String::Compare

Vea también

Referencia

Manipulación de cadenas (CRT)

memcmp, wmemcmp

_memicmp, _memicmp_l

strcmp, wcscmp, _mbscmp

strcoll (Funciones)

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