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
使用するロケール。

戻り値

戻り値は string1string2 の部分文字列の関係を次のように示します。

戻り値 説明
< 0 string1 部分文字列は string2 部分文字列よりも小さい
0 string1 部分文字列は string2 部分文字列と同じ
> 0 string1 部分文字列は string2 部分文字列よりも大きい

パラメーター検証エラーが発生した場合、_mbsncmp および _mbsncmp_l は **_NLSCMPERROR** を返します。これは、<string.h><mbstring.h> で定義されています。

解説

strncmp 関数は、countstring1 の先頭の最大 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 を返し、errnoEINVAL に設定します。 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 マクロまたはインライン関数にマップされます
該当なし 該当なし _mbsncmp_l 該当なし

必要条件

ルーチンによって返される値 必須ヘッダー
strncmp <string.h>
wcsncmp <string.h> または <wchar.h>
_mbsncmp, _mbsncmp_l <mbstring.h>

互換性の詳細については、「互換性」を参照してください。

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