memcmp
提供: cppreference.com
ヘッダ <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