strncmp
、 wcsncmp
、 _mbsncmp
、 _mbsncmp_l
2 つの文字列を、指定した文字数まで比較します。
重要
_mbsncmp
および _mbsncmp_l
は、Windows ランタイムで実行するアプリケーションでは使用できません。 詳細については、「ユニバーサル Windows プラットフォーム アプリでサポートされていない CRT 関数」を参照してください。
構文
int strncmp(
const char *string1,
const char *string2,
size_t count
);
int wcsncmp(
const wchar_t *string1,
const wchar_t *string2,
size_t count
);
int _mbsncmp(
const unsigned char *string1,
const unsigned char *string2,
size_t count
);
int _mbsncmp_l(
const unsigned char *string1,
const unsigned char *string2,
size_t count,
_locale_t locale
);int _mbsnbcmp(
const unsigned char *string1,
const unsigned char *string2,
size_t count
);
パラメーター
string1
, string2
比較する文字列。
count
比較する文字数
locale
使用するロケール。
戻り値
戻り値は string1
と string2
の部分文字列の関係を次のように示します。
戻り値 | 説明 |
---|---|
< 0 | string1 部分文字列は string2 部分文字列よりも小さい |
0 | string1 部分文字列は string2 部分文字列と同じ |
> 0 | string1 部分文字列は string2 部分文字列よりも大きい |
パラメーター検証エラーが発生した場合、_mbsncmp
および _mbsncmp_l
は _NLSCMPERROR
を返します。これは、<string.h>
と <mbstring.h>
で定義されています。
解説
strncmp
関数は、count
と string1
の先頭の最大 string2
文字で序数に基づく比較を行い、部分文字列の間の関係を示す値を返します。 strncmp
は _strnicmp
の大文字と小文字を区別するバージョンです。 wcsncmp
および _mbsncmp
は、_wcsnicmp
および _mbsnicmp
の大文字と小文字を区別するバージョンです。
wcsncmp
関数と _mbsncmp
関数は、strncmp
関数のワイド文字バージョンとマルチバイト文字バージョンです。 wcsncmp
の引数はワイド文字列です。 _mbsncmp
の引数はマルチバイト文字列です。 _mbsncmp
はマルチバイト コード ページに基づいてマルチバイト文字のシーケンスを認識し、エラーが発生した場合は _NLSCMPERROR
を返します。
また、_mbsncmp
および _mbsncmp_l
はパラメーターを検証します。 string1
またはstring2
が null ポインターであり、count
が 0 に等しくない場合は、「パラメーターの検証」で説明されているように、無効なパラメーター ハンドラー呼び出されます。 実行の継続が許可された場合、_mbsncmp
および _mbsncmp_l
は _NLSCMPERROR
を返し、errno
を EINVAL
に設定します。 strncmp
と wcsncmp
はパラメーターを検証しません。 それ以外では、これらの関数の動作は同じです。
_mbsncmp
および _mbsncmp_l
の比較の動作は、ロケールの LC_CTYPE
カテゴリの設定により影響されます。 これは、マルチバイト文字の先頭および末尾のバイトの検出を制御します。 詳細については、setlocale
を参照してください。 _mbsncmp
は、ロケールに依存するこの動作に現在のロケールを使用します。 _mbsncmp_l
関数は、代わりに locale
パラメーターを使用することを除けば、同一です。 詳細については、「 Locale」を参照してください。 ロケールが 1 バイトのロケールの場合、これらの関数の動作は strncmp
と同一です。
既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT でのグローバル状態」を参照してください。
汎用テキスト ルーチンのマップ
TCHAR.H ルーチン |
_UNICODE と _MBCS が定義されていない |
_MBCS が定義されている |
_UNICODE が定義されている |
---|---|---|---|
_tcsnccmp |
strncmp |
_mbsncmp |
wcsncmp |
_tcsncmp |
strncmp |
_mbsnbcmp |
wcsncmp |
_tccmp |
マクロまたはインライン関数にマップされます | _mbsncmp |
マクロまたはインライン関数にマップされます |
要件
ルーチンによって返される値 | 必須ヘッダー |
---|---|
strncmp |
<string.h> |
wcsncmp |
<string.h> または <wchar.h> |
_mbsncmp , _mbsncmp_l |
<mbstring.h> |
互換性の詳細については、「 Compatibility」を参照してください。
例
// crt_strncmp.c
#include <string.h>
#include <stdio.h>
char string1[] = "The quick brown dog jumps over the lazy fox";
char string2[] = "The QUICK brown fox jumps over the lazy dog";
int main( void )
{
char tmp[20];
int result;
printf( "Compare strings:\n %s\n %s\n\n",
string1, string2 );
printf( "Function: strncmp (first 10 characters only)\n" );
result = strncmp( string1, string2 , 10 );
if( result > 0 )
strcpy_s( tmp, sizeof(tmp), "greater than" );
else if( result < 0 )
strcpy_s( tmp, sizeof(tmp), "less than" );
else
strcpy_s( tmp, sizeof(tmp), "equal to" );
printf( "Result: String 1 is %s string 2\n\n", tmp );
printf( "Function: strnicmp _strnicmp (first 10 characters only)\n" );
result = _strnicmp( string1, string2, 10 );
if( result > 0 )
strcpy_s( tmp, sizeof(tmp), "greater than" );
else if( result < 0 )
strcpy_s( tmp, sizeof(tmp), "less than" );
else
strcpy_s( tmp, sizeof(tmp), "equal to" );
printf( "Result: String 1 is %s string 2\n", tmp );
}
Compare strings:
The quick brown dog jumps over the lazy fox
The QUICK brown fox jumps over the lazy dog
Function: strncmp (first 10 characters only)
Result: String 1 is greater than string 2
Function: strnicmp _strnicmp (first 10 characters only)
Result: String 1 is equal to string 2
関連項目
文字列操作
ロケール
マルチバイト文字のシーケンスの解釈
_mbsnbcmp
, _mbsnbcmp_l
_mbsnbicmp
, _mbsnbicmp_l
strcmp
、 wcscmp
、 _mbscmp
strcoll
関数
_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