_stricmp, _wcsicmp, _mbsicmp, _stricmp_l, _wcsicmp_l, _mbsicmp_l

Выполняет сравнение строк в нижнем регистре.

Важное примечаниеВажно

_mbsicmp и _mbsicmp_l нельзя использовать в приложениях, выполняемых в среды выполнения Windows.Дополнительные сведения см. в разделе Функции CRT не поддерживаются при /ZW.

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 как показано ниже.

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

Описание

< 0

string1 меньше чем string2.

0

string1 идентична string2.

> 0

string1 больше чем string2.

При ошибке _mbsicmp возвращает _NLSCMPERROR, которая определена в STRING.H и MBSTRING.H.

Заметки

Функция _stricmp сравнивает лексикографически в нижнем регистре версии string1 и string2 и возвращает значение, указывающее, их связь._stricmp отличается от _stricoll тем, что сравнение зависеть _stricmp на LC_CTYPE, тогда как сравнение _stricoll согласно категории LC_CTYPE и LC_COLLATE языкового стандарта.Дополнительные сведения о категории LC_COLLATE см. в разделах setlocale и Категории языкового стандарта.Версии этих функций без суффикса _l используют текущий языковой стандарт во время операций, зависящих от языкового стандарта.Версии с суффиксом идентичны, за исключением того, что вместо этого они используют переданный языковой стандарт.Для получения дополнительной информации см. Языковой стандарт.

ПримечаниеПримечание

_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 могла работать с символами Latin 1.По умолчанию действует языковой стандарт C, таким образом, например, ä не будет считаться равным Ä.Вызовите setlocale с любым языковым стандартом, отличным от языкового стандарта C, перед вызовом _wcsicmp.В следующем примере демонстрируется _wcsicmp чувствительно к языковому стандарту.

// crt_stricmp_locale.c
#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 );
}
  

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

System::String::Compare

См. также

Ссылки

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

memcmp, wmemcmp

_memicmp, _memicmp_l

strcmp, wcscmp, _mbscmp

функции strcoll

strncmp, wcsncmp, _mbsncmp, _mbsncmp_l

_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