strcmp
, , wcscmp
_mbscmp
_mbscmp_l
Сравнение строк.
Внимание
Функции _mbscmp
и _mbscmp_l
не могут использоваться в приложениях, запускаемых в среде выполнения Windows. Дополнительные сведения: Функции CRT, которые не поддерживаются в приложениях универсальной платформы Windows.
Синтаксис
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
);
int _mbscmp_l(
const unsigned char *string1,
const unsigned char *string2,
_locale_t locale
);
Параметры
string1
, string2
Строки с завершающим нулем для сравнения.
locale
Используемый языковой стандарт.
Возвращаемое значение
Возвращаемое значение каждой из этих функций отображает порядковое отношение строки string1
к строке string2
.
Значение | string1 Отношение кstring2 |
---|---|
< 0 | string1 меньше string2 |
0 | string1 идентична string2 |
> 0 | string1 больше, чем string2 |
При ошибке _mbscmp
проверки параметров и _mbscmp_l
возврате _NLSCMPERROR
, который определен в <string.h>
и <mbstring.h>
.
Замечания
Функция strcmp
выполняет порядковое сравнение строк string1
и string2
и возвращает значение, которое указывает их отношение. Функции wcscmp
и _mbscmp
являются версиями функции strcmp
для расширенных и многобайтовых символов соответственно. _mbscmp
распознает последовательности многобайтовых символов в соответствии с текущей многобайтовой кодовой страницей и возвращает _NLSCMPERROR
при ошибке. _mbscmp_l
имеет то же поведение, но использует параметр языкового стандарта, переданный вместо текущего языкового стандарта. Дополнительные сведения см. на страницах кода. Кроме того, если string1
или string2
является пустым указателем, _mbscmp
вызывает обработчик недопустимых параметров, как описано в разделе проверки параметров. Если выполнение может быть продолжено, то функции _mbscmp
и _mbscmp_l
возвращают ошибку _NLSCMPERROR
и устанавливают для errno
значение EINVAL
. strcmp
и wcscmp
не проверяйте их параметры. В остальном эти функции ведут себя одинаково.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.
Сопоставления подпрограмм универсального текста
TCHAR.H рутина |
_UNICODE и _MBCS не определен |
_MBCS Определенные |
_UNICODE Определенные |
---|---|---|---|
_tcscmp |
strcmp |
_mbscmp |
wcscmp |
Функции strcmp
отличаются от strcoll
функций в strcmp
сравнении порядковых значений и не влияют на языковой стандарт. strcoll
сравнивает строки лексикографически с использованием категории LC_COLLATE
текущего языкового стандарта. Дополнительные сведения о LC_COLLATE
категории см. в разделе . _wsetlocale
setlocale
В языковом стандарте "C" порядок символов в наборе символов (набор символов ASCII) совпадает с лексикографическим порядком символов. Однако в других языковых стандартах порядок символов в наборе символов может отличаться от лексикографического порядка. Например, в некоторых европейских языковых стандартах символ 'a
' (значение 0x61) приходится перед символом 'ä
' (значением 0xE4) в наборе символов, но символ 'ä
' поставляется перед символом 'a
' лексикографически.
При использовании языковых стандартов, в которых порядок символов в кодировке и лексикографический порядок различаются, используйте strcoll
вместо strcmp
для лексикографического сравнения строк. Также можно использовать функцию strxfrm
для исходных строк, а затем использовать функцию strcmp
для результирующих строк.
Функции strcmp
учитывают регистр. Функции _stricmp
, _wcsicmp
и _mbsicmp
перед сравнением преобразуют строки в нижний регистр. Две строки, содержащие символы, расположенные между "Z" и "a" в таблице ASCII ("[
, "", "\\
", "]
", "^
",_
"" и`
""), сравниваются по-разному в зависимости от их случая. Например, две строки "" и "ABCDE
" сравнивают один из способов, если сравнение является строчным ("abcde
>abcd^
" "") и другим способом ("ABCDE
<ABCD
^"), если сравнение является верхним регистром.ABCD^
Требования
Маршрут | Обязательный заголовок |
---|---|
strcmp |
<string.h> |
wcscmp |
<string.h> или <wchar.h> |
_mbscmp |
<mbstring.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость.
Библиотеки
Все версии библиотек времени выполнения языка C.
Пример
// 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 );
}
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
См. также
Обработка строк
memcmp
, wmemcmp
_memicmp
, _memicmp_l
Функции strcoll
_stricmp
, , _wcsicmp
_stricmp_l
_mbsicmp
_wcsicmp_l
,_mbsicmp_l
strncmp
, , wcsncmp
_mbsncmp
_mbsncmp_l
_strnicmp
, , _wcsnicmp
_strnicmp_l
_mbsnicmp
_wcsnicmp_l
,_mbsnicmp_l
strrchr
, , wcsrchr
_mbsrchr
_mbsrchr_l
strspn
, , wcsspn
_mbsspn
_mbsspn_l
strxfrm
, , wcsxfrm
_strxfrm_l
_wcsxfrm_l