std:: memcmp
|
ヘッダーで定義
<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つの文字列から指定された数の文字を比較する
(関数) |
|
|
Cドキュメント
for
memcmp
|
|