strcmp, wcscmp, _mbscmp
Compara cadenas.
Importante
_mbscmp no se puede 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 con /ZW.
int strcmp(
const char *string1,
const char *string2
);
int wcscmp(
const wchar_t *string1,
const wchar_t *string2
);
int _mbscmp(
const unsigned char *string1,
const unsigned char *string2
);
Parámetros
- string1, string2
Cadenas terminadas en NULL que se van a comparar.
Valor devuelto
El valor devuelto para cada una de estas funciones indica la relación ordinal de string1 respecto a string2.
Valor |
Relación de string1 y string2 |
---|---|
< 0 |
string1 es menor que string2 |
0 |
string1 es idéntica a string2 |
> 0 |
string1 es mayor que string2 |
Si se produce un error de validación de parámetros _mbscmp devuelve _NLSCMPERROR, que se define en <string.h> y <mbstring.h>.
Comentarios
La función strcmp realiza una comparación ordinal de string1 y string2 y devuelve un valor que indica su relación. wcscmp y _mbscmp son, respectivamente, versiones de caracteres anchos y multibyte de strcmp. _mbscmp 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, consulta Páginas de códigos. Además, si string1 o string2 son un puntero nulo, _mbscmp invoca el controlador de parámetros no válidos, como se describe en Validación de parámetros. Si la ejecución puede continuar, _mbscmp devuelve _NLSCMPERROR y establece errno en EINVAL. strcmp y wcscmp no validan sus parámetros. Estas tres funciones se comportan exactamente igual.
Asignaciones de rutina de texto genérico
Rutina TCHAR.H |
_UNICODE y _MBCS no definidos |
_MBCS definido |
_UNICODE definido |
---|---|---|---|
_tcscmp |
strcmp |
_mbscmp |
wcscmp |
Las funciones strcmp se diferencian de las funciones strcoll en que las comparaciones de strcmp son ordinales y no se ven afectadas por la configuración regional. strcoll compara las cadenas de manera lexicográfica usando la categoría LC_COLLATE de la configuración regional actual. Para obtener más información sobre la categoría LC_COLLATE, vea setlocale, _wsetlocale.
En la configuración regional "C", el orden de los caracteres del juego de caracteres (juego de caracteres ASCII) es el mismo que en los caracteres lexicográficos. Sin embargo, en otras configuraciones regionales, el orden de los caracteres del juego de caracteres puede diferir del orden lexicográfico. Por ejemplo, en algunas configuraciones regionales europeas el carácter “a” (valor 0x61) precede el carácter “ä” (valor 0xE4) en el juego de caracteres, pero el carácter “ä” precede el carácter “a” lexicográficamente.
En las configuraciones regionales en las que el orden del juego de caracteres y el lexicográfico difieran, puede usar strcoll en lugar de strcmp para realizar la comparación lexicográfica de cadenas. Como alternativa, puede usar strxfrm en las cadenas originales y después usar strcmp en las cadenas resultantes.
Las funciones strcmp distinguen entre mayúsculas y minúsculas. _stricmp, _wcsicmp y _mbsicmp comparan cadenas convirtiéndolas primero en su forma minúscula. Dos cadenas que contiene caracteres situados entre “Z” y “a” en la tabla ASCII (“[”, “\”, “]”', “^”, “_” y “`”) se comparan de forma distinta, dependiendo de si son mayúsculas o minúsculas. Por ejemplo, las dos cadenas "ABCDE" y "ABCD^" se comparan de un modo si la comparación es minúscula ("abcde" > "abcd^") y del otro ("ABCDE" < "ABCD^") si la comparación es mayúscula.
Requisitos
Rutina |
Encabezado necesario |
---|---|
strcmp |
<string.h> |
wcscmp |
<string.h> o <wchar.h> |
_mbscmp |
<mbstring.h> |
Para obtener información adicional de compatibilidad, vea Compatibilidad.
Bibliotecas
Todas las versiones de las bibliotecas en tiempo de ejecución de C.
Ejemplo
// crt_strcmp.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::CompareOrdinal
Vea también
Referencia
_stricmp, _wcsicmp, _mbsicmp, _stricmp_l, _wcsicmp_l, _mbsicmp_l
strncmp, wcsncmp, _mbsncmp, _mbsncmp_l
_strnicmp, _wcsnicmp, _mbsnicmp, _strnicmp_l, _wcsnicmp_l, _mbsnicmp_l
strrchr, wcsrchr, _mbsrchr, _mbsrchr_l