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

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

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


memchr関数

概要

メモリ上から、特定の文字を探す。

ヘッダ

string.h

形式

void* memchr(const void* s, int c, size_t n);

引数

s

探索するメモリの先頭のメモリアドレス。

c

探索する文字。

n

探索する文字数。

戻り値

発見された場合は、メモリ上のその文字を指すポインタ。
発見できなかった場合はヌルポインタ。

詳細

引数s が指す位置を先頭として、そこから 引数n の文字数分の範囲を探索し、引数c と一致するものを探す。文字は unsigned char型であるものと解釈する。

注意

探索対象を表す引数s は const であるのにも関わらず、戻り値は非const のポインタである。そのため、実引数に文字列リテラルを渡した場合に、戻り値で得られたポインタを経由して文字を変更するプログラムはコンパイルが通るが、動作は未定義になる。

(C++ では、const指定の扱いが厳しくなっているため、この関数は const版と非const版にオーバーロードされている)。

使用例

#include <stdio.h>
#include <string.h>

int main(void)
{
    const char str[] = "abc\0def";

    char* p = memchr(str, 'd', sizeof(str));
    if (p == NULL) {
        puts("見つからない。");
    }
    else {
        puts(p);
    }
}

実行結果:

def

関連

文字列からの探索に特化した strchr関数がある。
メモリ上からワイド文字を検索する wmemchr関数がある。

解説章

第34章


参考リンク


更新履歴

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

’2018/4/20 「NULL」という表記を「ヌルポインタ」に修正。

’2018/4/11 全体的に文章を見直し修正。

’2018/1/22 新規作成。



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

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

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

Programming Place Plus のトップページへ



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