Namespaces
Variants

std:: memcmp

From cppreference.net
ヘッダーで定義 <cstring>
int memcmp ( const void * lhs, const void * rhs, std:: size_t count ) ;

lhs および rhs が指すオブジェクトを unsigned char の配列として再解釈し、これらの配列の先頭 count バイトを比較します。比較は辞書順で行われます。

結果の符号は、比較対象のオブジェクト内で最初に異なるバイトのペア(両方とも unsigned char として解釈される)の値の差の符号によって決まります。

目次

パラメータ

lhs, rhs - 比較対象のメモリバッファへのポインタ
count - 検査するバイト数

戻り値

最初に異なるバイト( unsigned char として再解釈)が lhs 内で対応する rhs のバイトより小さい場合、負の値。

0 lhsとrhsのすべての count バイトが等しい場合。

lhs 内の最初に異なるバイトが rhs 内の対応するバイトより大きい場合、正の値。

注記

この関数は object representations を読み取り、オブジェクトの値そのものではなく、パディングを持たないトリビアルコピー可能なオブジェクトに対してのみ通常意味を持ちます。例えば、 memcmp() std::string 型または std::vector 型の2つのオブジェクト間で実行してもそれらの内容は比較されず、 memcmp() struct { char c ; int n ; } 型の2つのオブジェクト間で実行すると、 c n の値が同じでもパディングバイトの値が異なる可能性があるためそれらが比較され、さらにパディングバイトがなかったとしても、 int はエンディアンを考慮せずに比較されます。

#include <cstring>
#include <iostream>
void demo(const char* lhs, const char* rhs, std::size_t sz)
{
    std::cout << std::string(lhs, sz);
    const int rc = std::memcmp(lhs, rhs, sz);
    if (rc < 0)
        std::cout << " precedes ";
    else if (rc > 0)
        std::cout << " follows ";
    else
        std::cout << " compares equal to ";
    std::cout << std::string(rhs, sz) << " in lexicographical order\n";
}
int main()
{
    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

関連項目

2つの文字列を比較する
(関数)
2つの文字列から指定された数の文字を比較する
(関数)