名前空間
変種
操作

memcmp

提供: cppreference.com
< c‎ | string‎ | byte
ヘッダ <string.h> で定義
int memcmp( const void* lhs, const void* rhs, size_t count );

lhs および rhs の指すオブジェクトの先頭 count 文字を比較します。 比較は辞書的に行われます。

結果の符号は比較するオブジェクト内の最初の異なるバイトの組の値 (どちらも unsigned char として解釈されます) の差の符号です。

lhs または rhs の指すオブジェクトの終端を超えてアクセスが発生した場合、動作は未定義です。 lhs または rhs がヌルポインタの場合、動作は未定義です。

目次

[編集] 引数

lhs, rhs - 比較するオブジェクトを指すポインタ
count - 調べるバイト数

[編集] 戻り値

辞書順で lhsrhs より前に現れる場合は負の値。

lhsrhs が等しいまたは count がゼロの場合は、ゼロ。

辞書順で lhsrhs より後に現れる場合は正の値。

[編集] ノート

この関数はオブジェクトの値ではなくオブジェクト表現を読み取ります。 これは一般的にはバイト配列に対してのみ意味があります。 構造体は不定の値を持つパディングバイトを持つかもしれず、共用体は最後に格納されたメンバの後の任意のバイトの値が不定であり、型は同じ値に対して2つ以上の表現を持つ可能性があります (+0 と -0 や +0.0 と –0.0 に対する異なるエンコーディング、型内の不定のパディングビット)。

[編集]

#include <stdio.h>
#include <string.h>
 
void demo(const char* lhs, const char* rhs, size_t sz)
{
    for(size_t n = 0; n < sz; ++n) putchar(lhs[n]);
    int rc = memcmp(lhs, rhs, sz);
    if(rc == 0)
        printf(" compares equal to ");
    else if(rc < 0)
        printf(" precedes ");
    else if(rc > 0)
        printf(" follows ");
    for(size_t n = 0; n < sz; ++n) putchar(rhs[n]);
    puts(" in lexicographical order");
}
 
int main(void)
{
    char a1[] = {'a','b','c'};
    char a2[sizeof a1] = {'a','b','d'};
 
    demo(a1, a2, sizeof a1);
    demo(a2, a1, sizeof a1);
    demo(a1, a1, sizeof a1);
}

出力:

abc precedes abd in lexicographical order
abd follows abc in lexicographical order
abc compares equal to abc in lexicographical order

[編集] 参考文献

  • C11 standard (ISO/IEC 9899:2011):
  • 7.24.4.1 The memcmp function (p: 365)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.21.4.1 The memcmp function (p: 328)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 4.11.4.1 The memcmp function

[編集] 関連項目

2つの文字列を比較します
(関数) [edit]
2つの文字列の文字を一定量比較します
(関数) [edit]