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


strncmp, wcsncmp, _mbsncmp, _mbsncmp_l

Сравнивает символы двух строк вплоть до указанного количества.

Важно!

Функции _mbsncmp и _mbsncmp_l не могут использоваться в приложениях, запускаемых в среде выполнения Windows. Дополнительные сведения: Функции CRT, которые не поддерживаются в приложениях универсальной платформы Windows.

Синтаксис

int strncmp(
   const char *string1,
   const char *string2,
   size_t count
);
int wcsncmp(
   const wchar_t *string1,
   const wchar_t *string2,
   size_t count
);
int _mbsncmp(
   const unsigned char *string1,
   const unsigned char *string2,
   size_t count
);
int _mbsncmp_l(
   const unsigned char *string1,
   const unsigned char *string2,
   size_t count,
   _locale_t locale
);int _mbsnbcmp(
   const unsigned char *string1,
   const unsigned char *string2,
   size_t count
);

Параметры

string1, string2
Строки для сравнения.

count
Число сравниваемых символов.

locale
Используемый языковой стандарт.

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

Возвращаемое значение отражает взаимосвязь подстрок string1 и string2, как показано ниже.

Возвращаемое значение Description
< 0 Подстрока string1 меньше, чем подстрока string2.
0 Подстрока string1 идентична подстроке string2.
> 0 Подстрока string1 больше, чем подстрока string2.

При ошибке _mbsncmp проверки параметров и _mbsncmp_l возврате _NLSCMPERROR, который определен в <string.h> и <mbstring.h>.

Замечания

Функция strncmp выполняет порядковое сравнение не более чем count первых символов в string1 и string2 и возвращает значение, указывающее отношение между подстроками. strncmp — чувствительная к регистру версия _strnicmp. wcsncmp и _mbsncmp — чувствительные к регистру версии _wcsnicmp и _mbsnicmp.

Функции wcsncmp и _mbsncmp являются версиями функции strncmp для расширенных и многобайтовых символов. Аргументы wcsncmp являются строками расширенных символов. Аргументы _mbsncmp являются строками многобайтовых символов. _mbsncmp распознает последовательности многобайтовых символов в соответствии с многобайтовой кодовой страницей и возвращает _NLSCMPERROR при ошибке.

Кроме того, функции _mbsncmp и _mbsncmp_l проверяют свои параметры. Если string1 или string2 является пустым указателем и count не равен 0, вызывается обработчик недопустимых параметров, как описано в разделе проверки параметров. Если выполнение может быть продолжено, то функции _mbsncmp и _mbsncmp_l возвращают ошибку _NLSCMPERROR и устанавливают для errno значение EINVAL. strncmp и wcsncmp не проверяйте их параметры. В остальном эти функции ведут себя одинаково.

Способ сравнения _mbsncmp и _mbsncmp_l зависит от настройки категории LC_CTYPE языкового стандарта. Эта категория определяет обнаружение начальных и конечных байтов в многобайтовых символах. Дополнительные сведения см. в разделе setlocale. Функция _mbsncmp использует текущий языковой стандарт для данной функциональности, зависящей от языкового стандарта. Функция _mbsncmp_l идентична за исключением того, что она использует вместо этого параметр locale. Дополнительные сведения см. в разделе Locale. Если языковой стандарт является однобайтовым, поведение этих функций идентично поведению strncmp.

По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.

Сопоставления подпрограмм универсального текста

TCHAR.H Обычной _UNICODE и _MBCS не определен _MBCS Определенные _UNICODE Определенные
_tcsnccmp strncmp _mbsncmp wcsncmp
_tcsncmp strncmp _mbsnbcmp wcsncmp
_tccmp Сопоставляется макросу или встроенной функции _mbsncmp Сопоставляется макросу или встроенной функции

Требования

Маршрут Обязательный заголовок
strncmp <string.h>
wcsncmp <string.h> или <wchar.h>
_mbsncmp, _mbsncmp_l <mbstring.h>

Дополнительные сведения о совместимости см. в разделе Совместимость.

Пример

// crt_strncmp.c
#include <string.h>
#include <stdio.h>

char string1[] = "The quick brown dog jumps over the lazy fox";
char string2[] = "The QUICK brown fox jumps over the lazy dog";

int main( void )
{
   char tmp[20];
   int result;
   printf( "Compare strings:\n      %s\n      %s\n\n",
           string1, string2 );
   printf( "Function:   strncmp (first 10 characters only)\n" );
   result = strncmp( string1, string2 , 10 );
   if( result > 0 )
      strcpy_s( tmp, sizeof(tmp), "greater than" );
   else if( result < 0 )
      strcpy_s( tmp, sizeof(tmp), "less than" );
   else
      strcpy_s( tmp, sizeof(tmp), "equal to" );
   printf( "Result:      String 1 is %s string 2\n\n", tmp );
   printf( "Function:   strnicmp _strnicmp (first 10 characters only)\n" );
   result = _strnicmp( string1, string2, 10 );
   if( result > 0 )
      strcpy_s( tmp, sizeof(tmp), "greater than" );
   else if( result < 0 )
      strcpy_s( tmp, sizeof(tmp), "less than" );
   else
      strcpy_s( tmp, sizeof(tmp), "equal to" );
   printf( "Result:      String 1 is %s string 2\n", tmp );
}
Compare strings:
      The quick brown dog jumps over the lazy fox
      The QUICK brown fox jumps over the lazy dog

Function:   strncmp (first 10 characters only)
Result:      String 1 is greater than string 2

Function:   strnicmp _strnicmp (first 10 characters only)
Result:      String 1 is equal to string 2

См. также

Обработка строк
Локаль
Интерпретация последовательностей многобайтовых символов
_mbsnbcmp, _mbsnbcmp_l
_mbsnbicmp, _mbsnbicmp_l
strcmp, wcscmp, _mbscmp
Функции strcoll
_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