名前空間
変種
操作

std::memcmp

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

lhs および rhs の指すオブジェクトを unsigned char の配列として再解釈し、それらの配列の先頭 count 文字を比較します。 比較は辞書的に行われます。

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

目次

[編集] 引数

lhs, rhs - 比較するメモリバッファを指すポインタ
count - 調べるバイト数

[編集] 戻り値

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

lhsrhscount バイトすべて等しい場合は 0

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

[編集] ノート

この関数はオブジェクトの値ではなくオブジェクト表現を読み取ります。 これは一般的にはパディングのないトリビアルにコピー可能なオブジェクトに対してのみ意味があります。 例えば、 std::stringstd::vector 型の2つのオブジェクト間の memcmp() は、その内容を比較しませんし、 struct{char c; int n;} 型の2つのオブジェクト間の memcmp() は、 c および n の値が同じでも、異なる値を持つかもしれないパディングバイトを比較します。

[編集]

#include <iostream>
#include <cstring>
 
void demo(const char* lhs, const char* rhs, std::size_t sz)
{
    std::cout << std::string(lhs, sz);
    int rc = std::memcmp(lhs, rhs, sz);
    if(rc == 0)
        std::cout << " compares equal to ";
    else if(rc < 0)
        std::cout << " precedes ";
    else if(rc > 0)
        std::cout << " follows ";
    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つの文字列を比較します
(関数) [edit]
2つの文字列の文字を一定量比較します
(関数) [edit]