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


strcmp, wcscmp, _mbscmp

Сравнивают строки.

Важно!

_mbscmp нельзя использовать в приложениях, выполняемых в Среда выполнения Windows.Дополнительные сведения см. в разделе Функции CRT, не поддерживаемые с ключом /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 
);

Параметры

  • string1, string2
    Строки с завершающим нулем для сравнения.

Возвращаемое значение

Возвращаемое значение каждой из этих функций отображает порядковое отношение строки string1 к строке string2.

Значение

Отношение string1 к string2

< 0

string1 меньше чем string2

0

string1 идентично объявлению string2

> 0

string1 больше чем string2

При ошибке проверки параметра функция _mbscmp возвращает ошибку _NLSCMPERROR, которая определена в <string.h> и <mbstring.h>.

Заметки

Функция strcmp выполняет порядковое сравнение строк string1 и string2 и возвращает значение, которое указывает их отношение. Функции wcscmp и _mbscmp являются версиями функции strcmp для расширенных и многобайтовых символов соответственно. _mbscmp распознает последовательности многобайтовых символов в соответствии с текущей многобайтовой кодовой страницей и возвращает _NLSCMPERROR при ошибке. Для получения дополнительной информации см. Кодовые страницы. Кроме того, если string1 или string2 является указателем NULL, функция _mbscmp вызывает обработчик недопустимого параметра, как описано в разделе Проверка параметров. Если выполнение может быть продолжено, функция _mbscmp возвращает значение _NLSCMPERROR и устанавливает параметр errno в значение EINVAL. Функции strcmp и wcscmp не проверяют свои параметры. В остальном эти три функции ведут себя идентично.

Универсальное текстовое сопоставление функций

Подпрограмма TCHAR.H

_UNICODE и _MBCS не определены

_MBCS определено

_UNICODE определено

_tcscmp

strcmp

_mbscmp

wcscmp

Функции strcmp отличаются от функций strcoll тем, что сравнение strcmp является порядковым и не зависит от языкового стандарта. strcoll сравнивает строки лексикографически с использованием категории LC_COLLATE текущего языкового стандарта. Дополнительные сведения о категории LC_COLLATE см. в разделе setlocale, _wsetlocale.

В языковом стандарте "C" порядок символов в наборе символов (набор символов ASCII) совпадает с лексикографическим порядком символов. Однако в других языковых стандартах порядок символов в наборе символов может отличаться от лексикографического порядка. Например, в некоторых европейских языковых стандартах символ a (значение 0x61) предшествует символу ä (значение 0xE4) в наборе символов, но ä предшествует символу a лексикографически.

При использовании языковых стандартов, в которых порядок символов в кодировке и лексикографический порядок различаются, используйте strcoll вместо strcmp для лексикографического сравнения строк. Также можно использовать функцию strxfrm для исходных строк, а затем использовать функцию strcmp для результирующих строк.

Функции strcmp учитывают регистр. Функции _stricmp, _wcsicmp и _mbsicmp перед сравнением преобразуют строки в нижний регистр. Две строки, содержащие символы, которые расположены между Z и a в таблице ASCII ("[", "\", "]", "^", "_" и "`"), сравниваются по-разному в зависимости от их регистра. Например, две строки "ABCDE" и "ABCD^" сравниваются с одним результатом, если сравнение производится в нижнем регистре ("abcde" > "abcd^"), и с другим, если сравнение производится в верхнем регистре ("ABCDE" < "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 );
}
  

Эквивалент в .NET Framework

System::String::CompareOrdinal

См. также

Ссылки

Управление строками (CRT)

memcmp, wmemcmp

_memicmp, _memicmp_l

Функции strcoll

_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

strspn, wcsspn, _mbsspn, _mbsspn_l

strxfrm, wcsxfrm, _strxfrm_l, _wcsxfrm_l