名前空間
変種
操作

memcmp

From 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 がヌルポインタの場合、動作は未定義です。

目次

[編集] Parameters

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

[編集] Return value

lhsが辞書順でrhsより前にある場合は負の値。

lhsrhs が等しく比較された場合、または count がゼロの場合はゼロ。

lhsが辞書順でrhsより後にある場合は正の値。

[編集] Notes

この関数は、オブジェクトの値ではなく、オブジェクトの表現を読み取ります。通常、バイト配列に対してのみ意味があります。構造体には、値が不確定なパディングバイトが含まれる場合があり、共用体の最後の格納メンバーを超えたバイトの値は不確定であり、型によっては同じ値に対して2つ以上の表現を持つ場合があります(+0-0、または +0.00.0 の異なるエンコーディング、または型内の不確定なパディングビット)。

[編集] Example

#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);
    const char *rel = rc < 0 ? " precedes " : rc > 0 ? " follows " : " compares equal ";
    fputs(rel, stdout);
 
    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

[編集] References

  • C23標準 (ISO/IEC 9899:2024)
  • 7.24.4.1 The memcmp function (p: TBD)
  • C17標準 (ISO/IEC 9899:2018)
  • 7.24.4.1 The memcmp function (p: 266)
  • C11標準 (ISO/IEC 9899:2011)
  • 7.24.4.1 The memcmp function (p: 365)
  • C99標準 (ISO/IEC 9899:1999)
  • 7.21.4.1 The memcmp function (p: 328)
  • C89/C90標準 (ISO/IEC 9899:1990)
  • 4.11.4.1 The memcmp function

[編集] See also

2つの文字列を比較する
(関数) [編集]
2つの文字列の指定された数の文字を比較する
(関数) [編集]
English 日本語 中文(简体) 中文(繁體)