Поделиться через


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 категории см. в разделе . _wsetlocalesetlocale

В языковом стандарте "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