strcmp、wcscmp、_mbscmp

更新 : 2007 年 11 月

文字列を比較します。

int strcmp(
   const char *string1,
   const char *string2 
);
int wcscmp(
   const wchar_t *string1,
   const wchar_t *string2 
);
int _mbscmp(
   const unsigned char *string1,
   const unsigned char *string2 
);

パラメータ

  • string1, string2
    NULL で終わる比較対象の文字列。

戻り値

これらの関数の戻り値は、string1 と string2 を辞書式の順序で比較した関係を示します。

string1 と string2 の関係

< 0

string1 string1 は string2 より小さいstring2

0

string1 string1 と string2 は等しいstring2

> 0

string1 string1 は string2 より大きいstring2

エラーが発生すると、_mbscmp 関数は、STRING.H と MBSTRING.H で定義されている _NLSCMPERROR を返します。

解説

strcmp 関数は、string1 と string2 を辞書式の順序で比較し、その関係を示す値を返します。wcscmp 関数と _mbscmp 関数はそれぞれ、strcmp 関数のワイド文字バージョンとマルチバイト文字バージョンです。_mbscmp 関数は、現在のマルチバイト コード ページに基づいてマルチバイト文字列を認識し、エラー発生時には_NLSCMPERROR を返します。詳細については、「コード ページ」を参照してください。さらに、string1 または string2 が null ポインタの場合、「パラメータの検証」に説明されているように、_mbscmp は無効なパラメータ ハンドラを呼び出します。実行の継続が許可された場合、_mbscmp 関数は _NLSCMPERROR を返し、errno を EINVAL に設定します。strcmp 関数と wcscmp 関数はそれぞれのパラメータを検証しません。それ以外では、これらの関数の動作は同じです。

汎用テキスト ルーチンのマップ

TCHAR.H のルーチン

_UNICODE および _MBCS が未定義の場合

_MBCS が定義されている場合

_UNICODE が定義されている場合

_tcscmp

strcmp

_mbscmp

wcscmp

strcmp 系関数による比較はロケールの影響を受けませんが、strcoll 系関数による比較の方法は現在のロケールの LC_COLLATE カテゴリによって決まります。LC_COLLATE カテゴリの詳細については、「setlocale、_wsetlocale」を参照してください。

"C" ロケールでは、文字セット (ASCII 文字セット) の文字の順序が辞書式の文字の順序と同じです。ただし、文字セットの文字の順序が辞書式の順序と異なるロケールもあります。たとえば、ヨーロッパの一部のロケールでは、文字 a (値 0x61) は文字セットで文字 'ä' (値 0xE4) の前にありますが、辞書式の順序では文字 'ä' が文字 'a' の前にあります。

文字セットの順序が辞書式の順序と異なるロケールでは、strcmp 関数ではなく strcoll 関数を使用し、現在のロケールの LC_COLLATE カテゴリ設定に基づいた辞書式の文字列比較を行います。したがって、上記のロケールで辞書式の比較を行うには、strcmp 関数ではなく strcoll 関数を使用します。また、元の文字列で strxfrm 関数を使用してから、結果の文字列で strcmp 関数を使用することもできます。

_stricmp、_wcsicmp、_mbsicmp の各関数は、最初に文字列を小文字に変換してから比較します。ASCII テーブルで Z ~ a の範囲にある文字 ([、\、]、^、_、`) を含む 2 つの文字列を比較すると、大文字か小文字かによって結果が異なります。たとえば、2 つの文字列 "ABCDE" と "ABCD^" では、小文字で比較すると "abcde" > "abcd^" になりますが、大文字で比較すると "ABCDE" < "ABCD^" になります。

必要条件

ルーチン

必須ヘッダー

strcmp

<string.h>

wcscmp

<string.h> または <wchar.h>

_mbscmp

<mbstring.h>

互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。

ライブラリ

C ランタイム ライブラリのすべてのバージョン。

使用例

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

.NET Framework の相当するアイテム

System::String::CompareOrdinal

参照

参照

文字列操作 (CRT)

memcmp、wmemcmp

_memicmp、_memicmp_l

strcoll 系関数

_stricmp、_wcsicmp、_mbsicmp、_stricmp_l、_wcsicmp_l、_mbsicmp_l

strncmp、wcsncmp、_mbsncmp、_mbsncmp_l

_strnicmp、_wcsnicmp、_mbsnicmp、_strnicmp_l、_wcsnicmp_l、_mbsnicmp_l

strrchr、wcsrchr、_mbsrchr、_mbsrchr_l

strspn、wcsspn、_mbsspn、_mbsspn_l

strxfrm、wcsxfrm、_strxfrm_l、_wcsxfrm_l