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