strncmp, wcsncmp, _mbsncmp, _mbsncmp_l
Сравнивает символы двух строк вплоть до указанного количества.
Важно!
Функции _mbsncmp и _mbsncmp_l не могут использоваться в приложениях, запускаемых в среде выполнения Windows.Дополнительные сведения см. в разделе Функции CRT, которые не поддерживаются с ключом /ZW.
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, как показано ниже.
Возвращаемое значение |
Описание |
---|---|
< 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 является указателем NULL, вызывается обработчик недопустимых параметров, как описано в разделе Проверка параметров. Если выполнение может быть продолжено, то функции _mbsncmp и _mbsncmp_l возвращают ошибку _NLSCMPERROR и устанавливают для errno значение EINVAL. Функции strncmp и wcsncmp не проверяют свои параметры. В остальном эти функции ведут себя одинаково.
Способ сравнения _mbsncmp и _mbsncmp_l зависит от настройки категории LC_CTYPE языкового стандарта. Эта категория определяет обнаружение начальных и конечных байтов в многобайтовых символах. Подробнее см. в разделе setlocale. Функция _mbsncmp использует текущий языковой стандарт для данной функциональности, зависящей от языкового стандарта. Функция _mbsncmp_l идентична за исключением того, что она использует вместо этого параметр locale. Для получения дополнительной информации см. Языковой стандарт. Если языковой стандарт является однобайтовым, поведение этих функций идентично поведению strncmp.
Универсальное текстовое сопоставление функций
Подпрограмма TCHAR.H |
_UNICODE и _MBCS не определены |
_MBCS определено |
_UNICODE определено |
---|---|---|---|
_tcsnccmp |
strncmp |
_mbsncmp |
wcsncmp |
_tcsncmp |
strncmp |
_mbsnbcmp |
wcsncmp |
_tccmp |
Сопоставляется макросу или встроенной функции |
_mbsncmp |
Сопоставляется макросу или встроенной функции |
Неприменимо |
Неприменимо |
_mbsncmp_l |
Неприменимо |
Требования
Подпрограмма |
Обязательный заголовок |
---|---|
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 );
}
Эквивалент в .NET Framework
См. также
Ссылки
Интерпретация последовательностей в многобайтной кодировке
_strnicmp, _wcsnicmp, _mbsnicmp, _strnicmp_l, _wcsnicmp_l, _mbsnicmp_l
strrchr, wcsrchr, _mbsrchr, _mbsrchr_l