memcmp
提供: cppreference.com
<tbody>
</tbody>
| ヘッダ <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 | - | 調べるバイト数 |
戻り値
辞書順で lhs が rhs より前に現れる場合は負の値。
lhs と rhs が等しいまたは count がゼロの場合は、ゼロ。
辞書順で lhs が rhs より後に現れる場合は正の値。
ノート
この関数はオブジェクトの値ではなくオブジェクト表現を読み取ります。 これは一般的にはバイト配列に対してのみ意味があります。 構造体は不定の値を持つパディングバイトを持つかもしれず、共用体は最後に格納されたメンバの後の任意のバイトの値が不定であり、型は同じ値に対して2つ以上の表現を持つ可能性があります (+0 と -0 や +0.0 と –0.0 に対する異なるエンコーディング、型内の不定のパディングビット)。
例
Run this code
#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