_stricmp
, , _wcsicmp
_stricmp_l
_mbsicmp
_wcsicmp_l
,_mbsicmp_l
Выполняет сравнение строк без учета регистра.
Внимание
Функции _mbsicmp
и _mbsicmp_l
не могут использоваться в приложениях, запускаемых в среде выполнения Windows. Дополнительные сведения: Функции CRT, которые не поддерживаются в приложениях универсальной платформы Windows.
Синтаксис
int _stricmp(
const char *string1,
const char *string2
);
int _wcsicmp(
const wchar_t *string1,
const wchar_t *string2
);
int _mbsicmp(
const unsigned char *string1,
const unsigned char *string2
);
int _stricmp_l(
const char *string1,
const char *string2,
_locale_t locale
);
int _wcsicmp_l(
const wchar_t *string1,
const wchar_t *string2,
_locale_t locale
);
int _mbsicmp_l(
const unsigned char *string1,
const unsigned char *string2,
_locale_t locale
);
Параметры
string1
, string2
Строки с завершающим нулем для сравнения.
locale
Используемый языковой стандарт.
Возвращаемое значение
Возвращаемое значение отражает взаимосвязь string1
со string2
, как показано ниже.
Возвращаемое значение | Description |
---|---|
< 0 | string1 меньше string2 |
0 | string1 идентично string2 |
> 0 | string1 больше string2 |
При ошибке возвращается _NLSCMPERROR
значение _mbsicmp
, которое определяется в <string.h>
и <mbstring.h>
.
Замечания
_stricmp
Функция сравнивает string1
и string2
после преобразования каждого символа в строчный регистр и возвращает значение, указывающее их связь. _stricmp
отличается от _stricoll
тем, что на сравнение _stricmp
влияет только тип LC_CTYPE
, определяющий регистр символов. Функция _stricoll
сравнивает строки в соответствии с категориями LC_CTYPE
и LC_COLLATE
языкового стандарта, который включает как регистр, так и порядок сортировки. Дополнительные сведения о LC_COLLATE
категории см. в категориях setlocale
и категориях языкового стандарта. Версии этих функций без суффикса _l
используют текущий языковой стандарт во время операций, зависящих от языкового стандарта. Версии с суффиксом идентичны за исключением того, что вместо этого они используют переданный языковой стандарт. Если языковой стандарт не задан, используется языковой стандарт C. Дополнительные сведения см. в разделе Locale.
Примечание.
_stricmp
эквивалентна _strcmpi
. Они взаимозаменяемы, но предпочтительнее стандарт _stricmp
.
Функция _strcmpi
эквивалентна _stricmp
и предоставляется только для обеспечения обратной совместимости.
Так как _stricmp
производит сравнение в нижнем регистре, это может стать причиной непредвиденного поведения.
Чтобы проиллюстрировать, когда преобразование _stricmp
регистра влияет на результат сравнения, предположим, что у вас есть две строки JOHNSTON
и JOHN_HENRY
. Строка JOHN_HENRY
будет считаться меньше JOHNSTON
, чем из-за того, что "_
" имеет меньшее значение ASCII, чем строчная буква S. На самом деле любой символ, имеющий значение ASCII в диапазоне от 91 до 96, будет считаться меньше, чем любая буква.
strcmp
Если функция используется вместо _stricmp
, JOHN_HENRY
будет большеJOHNSTON
.
Функции _wcsicmp
и _mbsicmp
являются версиями функции _stricmp
для расширенных и многобайтовых символов. Аргументы и возвращаемые значения _wcsicmp
являются строками с широкими символами. Аргументы и возвращаемое значение _mbsicmp
являются многобайтовыми строками. _mbsicmp
распознает последовательности многобайтовых символов в соответствии с текущей многобайтовой кодовой страницей и возвращает _NLSCMPERROR
при ошибке. Дополнительные сведения см. на страницах кода. В остальном эти три функции ведут себя идентично.
_wcsicmp
и wcscmp
ведет себя одинаково, за исключением того, что wcscmp
не преобразует свои аргументы в нижний регистр перед сравнением. _mbsicmp
и _mbscmp
ведет себя одинаково, за исключением того, что _mbscmp
не преобразует свои аргументы в нижний регистр перед сравнением.
Вам потребуется обратиться setlocale
_wcsicmp
к работе с латинскими 1 символами. Языковой стандарт C действует по умолчанию, поэтому, например, ä не будет сравниваться с Ä. Вызовите setlocale
с любым языковым стандартом, отличным от C, перед вызовом _wcsicmp
. Следующий пример демонстрирует, насколько функция _wcsicmp
чувствительна к языковому стандарту:
// crt_stricmp_locale.c
By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md).
#include <string.h>
#include <stdio.h>
#include <locale.h>
int main() {
setlocale(LC_ALL,"C"); // in effect by default
printf("\n%d",_wcsicmp(L"ä", L"Ä")); // compare fails
setlocale(LC_ALL,"");
printf("\n%d",_wcsicmp(L"ä", L"Ä")); // compare succeeds
}
Альтернативой является вызов _create_locale
_wcreate_locale
и передача возвращаемого объекта языкового стандарта в качестве параметра._wcsicmp_l
Все эти функции проверяют свои параметры. Если указатель string1
string2
имеет значение NULL, вызывается обработчик недопустимых параметров, как описано в разделе проверки параметров. Если продолжение выполнения разрешено, эти функции возвращают _NLSCMPERROR
и устанавливают для errno
значение EINVAL
.
Сопоставления подпрограмм универсального текста
TCHAR.H рутина |
_UNICODE и _MBCS не определен |
_MBCS Определенные |
_UNICODE Определенные |
---|---|---|---|
_tcsicmp |
_stricmp |
_mbsicmp |
_wcsicmp |
Требования
Маршрут | Обязательный заголовок |
---|---|
_stricmp , _stricmp_l |
<string.h> |
_wcsicmp , _wcsicmp_l |
<string.h> или <wchar.h> |
_mbsicmp , _mbsicmp_l |
<mbstring.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость.
Пример
// crt_stricmp.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
strcmp
, , wcscmp
_mbscmp
Функции strcoll
strncmp
, , wcsncmp
_mbsncmp
_mbsncmp_l
_strnicmp
, , _wcsnicmp
_strnicmp_l
_mbsnicmp
_wcsnicmp_l
,_mbsnicmp_l
strrchr
, , wcsrchr
_mbsrchr
_mbsrchr_l
_strset
, , _strset_l
_wcsset_l
_wcsset
_mbsset
,_mbsset_l
strspn
, , wcsspn
_mbsspn
_mbsspn_l