Share via


_stricmp, _wcsicmp, _mbsicmp, _stricmp_l, _wcsicmp_l, _mbsicmp_l

Melakukan perbandingan string yang tidak peka huruf besar/kecil.

Penting

_mbsicmp dan _mbsicmp_l tidak dapat digunakan dalam aplikasi yang dijalankan di Windows Runtime. Untuk informasi selengkapnya, lihat Fungsi CRT yang tidak didukung di aplikasi Platform Windows Universal.

Sintaks

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
);

Parameter

string1, string2
String yang dihentikan null untuk dibandingkan.

locale
Lokal untuk digunakan.

Nilai hasil

Nilai pengembalian menunjukkan hubungan string1 dengan string2 sebagai berikut.

Nilai hasil Deskripsi
< 0 string1 Kurang string2
0 string1 identik dengan string2
> 0 string1 lebih besar dari string2

Pada kesalahan, _mbsicmp mengembalikan _NLSCMPERROR, yang didefinisikan dalam <string.h> dan <mbstring.h>.

Keterangan

Fungsi membandingkan _stricmpstring1 dan string2 setelah mengonversi setiap karakter menjadi huruf kecil, dan mengembalikan nilai yang menunjukkan hubungannya. _stricmp berbeda dari _stricoll di mana perbandingan _stricmp hanya dipengaruhi oleh LC_CTYPE, yang menentukan karakter mana yang merupakan huruf besar dan kecil. Fungsi ini _stricoll membandingkan string sesuai dengan LC_CTYPE kategori dan LC_COLLATE lokal, yang mencakup kasus dan urutan kolaborasi. Untuk informasi selengkapnya tentang LC_COLLATE kategori, lihat setlocale dan Kategori lokal. Versi fungsi-fungsi ini tanpa _l akhiran menggunakan lokal saat ini untuk perilaku dependen lokal. Versi dengan akhiran identik kecuali mereka menggunakan lokal yang diteruskan sebagai gantinya. Jika lokal belum diatur, lokal C akan digunakan. Untuk informasi selengkapnya, lihat Lokal.

Catatan

_stricmp setara dengan _strcmpi. Mereka dapat digunakan secara bergantian tetapi _stricmp merupakan standar yang disukai.

Fungsi _strcmpi ini setara dengan _stricmp dan disediakan hanya untuk kompatibilitas mundur.

Karena _stricmp perbandingan huruf kecil dapat mengakibatkan perilaku yang tidak terduga.

Untuk mengilustrasikan kapan konversi kasus dengan _stricmp memengaruhi hasil perbandingan, asumsikan JOHNSTON bahwa Anda memiliki dua string dan JOHN_HENRY. String JOHN_HENRY akan dianggap kurang dari JOHNSTON karena "_" memiliki nilai ASCII yang lebih rendah daripada huruf kecil S. Bahkan, setiap karakter yang memiliki nilai ASCII antara 91 dan 96 akan dianggap kurang dari huruf apa pun.

strcmp Jika fungsi digunakan alih-alih _stricmp, JOHN_HENRY akan lebih besar dari JOHNSTON.

_wcsicmp dan _mbsicmp adalah versi karakter lebar dan multibyte-character dari _stricmp. Argumen dan nilai yang dikembalikan adalah _wcsicmp string karakter lebar. Argumen dan nilai yang dikembalikan adalah _mbsicmp string multibyte-character. _mbsicmp mengenali urutan karakter multibyte sesuai dengan halaman kode multibyte saat ini dan mengembalikan _NLSCMPERROR kesalahan. Untuk informasi selengkapnya, lihat Halaman kode. Ketiga fungsi ini berulah secara identik jika tidak.

_wcsicmp dan wcscmp berperilaku identik kecuali yang wcscmp tidak mengonversi argumennya menjadi huruf kecil sebelum membandingkannya. _mbsicmp dan _mbscmp berperilaku identik kecuali yang _mbscmp tidak mengonversi argumennya menjadi huruf kecil sebelum membandingkannya.

Anda harus memanggil setlocale_wcsicmp untuk bekerja dengan karakter Latin 1. Lokal C berlaku secara default, jadi, misalnya, ä tidak akan dibandingkan dengan Ä. Hubungi setlocale dengan lokal apa pun selain lokal C sebelum panggilan ke _wcsicmp. Sampel berikut menunjukkan bagaimana _wcsicmp sensitif terhadap lokal:

// 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
}

Alternatifnya adalah memanggil _create_locale, _wcreate_locale dan meneruskan objek lokal yang dikembalikan sebagai parameter ke _wcsicmp_l.

Semua fungsi ini memvalidasi parameternya. Jika salah satu string1 atau string2 adalah penunjuk null, handler parameter yang tidak valid dipanggil, seperti yang dijelaskan dalam Validasi parameter . Jika eksekusi diizinkan untuk melanjutkan, fungsi-fungsi ini kembali _NLSCMPERROR dan diatur errno ke EINVAL.

Pemetaan rutin teks generik

TCHAR.H Rutin _UNICODE dan _MBCS tidak ditentukan _MBCS Didefinisikan _UNICODE Didefinisikan
_tcsicmp _stricmp _mbsicmp _wcsicmp

Persyaratan

Rutin Header yang diperlukan
_stricmp, _stricmp_l <string.h>
_wcsicmp, _wcsicmp_l <string.h> atau <wchar.h>
_mbsicmp, _mbsicmp_l <mbstring.h>

Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.

Contoh

// 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

Baca juga

Manipulasi string
memcmp, wmemcmp
_memicmp, _memicmp_l
strcmp, wcscmp, _mbscmp
strcoll Fungsi
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