memcmp | Programming Place Plus C言語編 標準ライブラリのリファレンス

トップページC言語編標準ライブラリのリファレンス(名前順)

トップページC言語編標準ライブラリのリファレンス(ヘッダ別)


memcmp関数 🔗

概要

2つのメモリアドレスを起点に、それぞれ指定の文字数分の比較を行う。

ヘッダ

string.h

形式

int memcmp(const void* s1, const void* s2, size_t size);

引数

s1

比較するメモリの先頭メモリアドレス。

s2

比較するメモリの先頭メモリアドレス。

size

比較する文字数。

戻り値

辞書順で s1 の方が小さければ(前に来れば) 0 より小さい値が、s1 の方が大きければ(後に来れば) 0 より大きい値が、s1 と s2 が同じであれば 0 が返される。

詳細

2つのメモリアドレスを2つの比較範囲の先頭として、それぞれ、引数 size の文字数分だけの比較を行う。文字は unsigned char型であるものと解釈する。
終端文字(‘\0’) で終了しない点を除けば、処理内容は strcmp関数と変わらない。

注意 構造体のメンバ間には、処理系がパディングを挿入する可能性があるので(第26章)、構造体変数同士を比較するような目的で、この関数を使用することは間違いである。構造体変数同士の比較は、各メンバを個別に等価演算子で調べるのが正しい。
使用例
#include <stdio.h>
#include <string.h>

int main(void)
{
    char s1[] = "abc\0de";
    char s2[] = "ab\0c";
    char s3[] = "abcdef";

    printf("%d\n", memcmp(s1, s1, sizeof(s1)));
    printf("%d\n", memcmp(s1, s2, sizeof(s1)));
    printf("%d\n", memcmp(s1, s3, sizeof(s1)));
}

実行結果:

0
1
-1
関連

適切に終端文字(‘\0’) があり、途中に登場することも無い、普通の文字列同士の比較であれば、strcmp関数を使えば良い。
各文字をワイド文字とみなして同様の処理を行う wmemcmp関数がある。

解説章 第34章


参考リンク 🔗

本ページはアフィリエイトプログラムによる収益を得ています。
以下のリンクから商品を購入されると、Programming Place 管理者に紹介料が支払われています。


更新履歴 🔗

 解説中で C95 を(C89 に対して)特別扱いしないように修正。そもそもC言語編は C95ベースなので、余計な説明は省く。

 「サイズ」という表記について表現を統一。型のサイズ(バイト数)を表しているところは「大きさ」、要素数を表しているところは「要素数」。

 新規作成。



標準ライブラリのリファレンス(名前順)のトップページへ

標準ライブラリのリファレンス(ヘッダ別)のトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る