_stricmp, _wcsicmp, _mbsicmp, _stricmp_l, _wcsicmp_l, _mbsicmp_l
대소문자를 구분하지 않는 문자열 비교를 수행합니다.
중요
Windows 런타임에서 실행되는 응용 프로그램에서는 _mbsicmp 및 _mbsicmp_l을 사용할 수 없습니다.자세한 내용은 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
비교할 Null 종료 문자열입니다.locale
사용할 로캘입니다.
반환 값
반환 값은 string2에 대한 string1의 관계를 다음과 같이 나타냅니다.
반환 값 |
설명 |
---|---|
< 0 |
string1 < string2 |
0 |
string1 = string2 |
> 0 |
string1 > string2 |
오류 발생 시 _mbsicmp는 <string.h> 및 <mbstring.h>에 정의된 _NLSCMPERROR를 반환합니다.
설명
_stricmp 함수는 각 문자를 소문자로 변환한 다음 string1 및 string2를 서수로 비교하여 해당 관계를 나타내는 값을 반환합니다. _stricmp 비교에는 대문자와 소문자를 결정하는 LC_CTYPE만 적용된다는 점에서 _stricmp와 _stricoll은 서로 다릅니다. _stricoll 함수는 로캘의 LC_CTYPE 및 LC_COLLATE 범주 둘 다에 따라 문자열을 비교합니다. 여기에는 대소문자 및 데이터 정렬 순서가 모두 포함됩니다. LC_COLLATE 범주에 대한 자세한 내용은 setlocale 및 로캘 범주를 참조하세요. _l 접미사가 없는 이러한 함수의 버전은 로캘 종속 동작에 현재 로캘을 사용합니다. 접미사가 있는 버전은 전달된 로캘을 사용한다는 점만 제외하면 동일합니다. 로캘이 설정되지 않은 경우에는 C 로캘이 사용됩니다. 자세한 내용은 로캘을 참조하십시오.
참고
_stricmp는 _strcmpi와 같습니다.이 두 항목은 서로 바꿔 사용할 수 있지만 기본적으로 사용되는 표준은 _stricmp입니다.
_strcmpi 함수는 _stricmp와 같으며 이전 버전과의 호환성을 위해서만 제공됩니다.
_stricmp는 소문자 비교를 수행하므로 예기치 않은 동작이 발생할 수 있습니다.
_stricmp가 수행하는 대소문자 변환이 비교 결과에 영향을 주는 경우를 살펴보기 위해 JOHNSTON과 JOHN_HENRY라는 두 문자열이 있다고 가정해 보겠습니다. JOHN_HENRY 문자열은 "_"의 ASCII 값이 소문자 S보다 작기 때문에 JOHNSTON보다 작은 것으로 간주됩니다. 실제로 ASCII 값이 91~96인 문자는 모든 문자보다 작은 것으로 간주됩니다.
_stricmp 대신 strcmp 함수를 사용하는 경우에는 JOHN_HENRY가 JOHNSTON보다 큽니다.
_wcsicmp 및 _mbsicmp는 _stricmp의 와이드 문자 및 멀티바이트 문자 버전입니다. _wcsicmp의 인수 및 반환 값은 와이드 문자열이며 _mbsicmp의 인수와 반환 값은 멀티바이트 문자열입니다. _mbsicmp는 현재 멀티바이트 코드 페이지에 따라 멀티바이트 문자 시퀀스를 인식하며 오류 발생 시 _NLSCMPERROR를 반환합니다. 자세한 내용은 코드 페이지를 참조하세요. 그렇지 않으면 이들 세 함수는 동일하게 작동합니다.
wcscmp는 인수를 비교하기 전에 소문자로 변환하지 않는다는 점을 제외하면 _wcsicmp 및 wcscmp는 동일하게 작동합니다. _mbscmp는 인수를 비교하기 전에 소문자로 변환하지 않는다는 점을 제외하면 _mbsicmp 및 _mbscmp는 동일하게 작동합니다.
라틴 1 문자를 사용하려면 _wcsicmp에 대해 setlocale을 호출해야 합니다. 기본적으로는 C 로캘이 적용되므로 예를 들어 ä와 Ä는 비교 시 같은 항목으로 간주되지 않습니다. _wcsicmp를 호출하기 전에 C 이외의 로캘로 setlocale을 호출합니다. 다음 샘플에서는 _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 항목
참고 항목
참조
strncmp, wcsncmp, _mbsncmp, _mbsncmp_l
_strnicmp, _wcsnicmp, _mbsnicmp, _strnicmp_l, _wcsnicmp_l, _mbsnicmp_l
strrchr, wcsrchr, _mbsrchr, _mbsrchr_l