memchr, memrchr, rawmemchr -
文字を探すためにメモリーをスキャンする
#include <string.h>
void *memchr(const void *s, int c, size_t n);
void *memrchr(const void *s, int c, size_t n);
void *rawmemchr(const void *s, int c);
memrchr():
rawmemchr(): _GNU_SOURCE
memchr()
関数は、ポインター
s
が指し示すメモリー領域の先頭の
n
バイトから最初に登場する文字
c を探す。
c と
s
が指し示すメモリー領域の各バイトは両方とも
unsigned char と解釈される。
memrchr() 関数は
memchr()
関数に似ているが、
先頭から順方向に探すのではなく、
ポインター
s
が指し示す
n
バイトのメモリーブロックの
末尾から逆向きに探す。
rawmemchr() 関数は
memchr()
と同様だが、
c が
s
が指す場所
から始まるメモリー領域のどこかにあることを前提にして
(つまり、プログラマ
はそのことを知っている)、最適化した方法で
c の検索を実行する
(すなわ
ち、検索範囲の上限を示す引数も使用されない)。
c
が見つからなかった
場合、その結果はどうなるか分からない。次に示す呼び出しは、文字列終端の
ヌルバイトの位置を特定する高速な手段である。
char *p = rawmemchr(s, '\0');
memchr() 関数と
memrchr()
関数は一致する文字へのポインターを返し、
もし文字が指定メモリー領域に現れない場合は
NULL を返す。
rawmemchr()
関数はマッチするバイトが見つかった場合はマッチしたバイトへのポインターを返す。
マッチするバイトが見つからなかった場合、結果は不定である。
rawmemchr() は glibc バージョン 2.1
で初めて登場した。
memrchr() は glibc バージョン 2.2
で初めて登場した。
この節で使用されている用語の説明については、
attributes(7) を参照。
インターフェース |
属性 |
値 |
memchr(), memrchr(), rawmemchr() |
Thread safety |
MT-Safe |
memchr(): POSIX.1-2001, POSIX.1-2008, C89, C99, SVr4, 4.3BSD.
memrchr() 関数は GNU
拡張であり、glibc 2.1.91
から使用可能である。
rawmemchr() 関数は GNU
拡張であり、glibc 2.1
から使用可能である。
bstring(3),
ffs(3),
index(3),
memmem(3),
rindex(3),
strchr(3),
strpbrk(3),
strrchr(3),
strsep(3),
strspn(3),
strstr(3),
wmemchr(3)
この man ページは Linux
man-pages
プロジェクトのリリース
5.10
の一部である。プロジェクトの説明とバグ報告に関する情報は
https://www.kernel.org/doc/man-pages/
に書かれている。