_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
要比較的 NULL 結尾字串。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 的大小寫轉換時影響比較的結果,假設,您有兩個字串 John 的組織和 JOHN_HENRY。因為「_」比小寫 S.,具有較低的 ASCII 字串 JOHN_HENRY 將被視為小於 John 的組織。實際上,在 91 和 96 之間的 ASCII 值的字元都會被視為小於任何字母。
如果 strcmp 函式使用而不是 stricmp, JOHN_HENRY 將大於 John 的組織。
_wcsicmp 和 _mbsicmp 是 _stricmp 的寬字元和多位元組字元版本。_wcsicmp 的參數和回傳值是寬字元字串,而 _mbsicmp 則是多位元組字元字串。_mbsicmp 表示根據目前的多位元組字碼頁辨識多位元組字元序列並傳回錯誤的 _NLSCMPERROR 。(如需詳細資訊,請參閱 字碼頁)。這三個函式其餘部分的運作相同。
_wcsicmp 和 wcscmp 的作用完全相同,但是 wcscmp 不會將它的引數為小寫在比較它們。_mbsicmp 和 _mbscmp 的作用完全相同,但是 _mbscmp 不會將它的引數為小寫在比較它們。
您必須呼叫 _wcsicmp 的 setlocale 可以與拉丁文 1 字元一起使用。預設 C# 地區設定生效,如此,例如, ä 與 Ä 不會比較相等。呼叫 Excel 物件模型之所有區分地區設定的 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> |
如需其他相容性資訊,請參閱入門介紹中的 相容性 (Compatibility) 。
範例
// 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