#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);
glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):
memrchr(): rawmemchr(): _GNU_SOURCE
memrchr() 関数は memchr() 関数に似ているが、 先頭から順方向に探すのではなく、 ポインタ s が指し示す n バイトのメモリブロックの 末尾から逆向きに探す。
rawmemchr() 関数は memchr() と同様だが、 文字 c が文字列 s 内のどこかにあることを前提にして (つまり、プログラマはそのことを知っている)、 最適化した方法で文字 c の検索を実行する (すなわち、終端の NULL バイトのチェックも行われないし、 検索範囲の上限を示す引き数 n も使用されない)。 文字 c が文字列 s 内にない場合、 rawmemchr() は文字列末尾を越えて検索を実行するかもしれず、結果は不定である。 次に示す呼び出しは、文字列終端の NULL バイトの位置を特定する 高速な手段である。
char *p = rawmemchr(s, aq\0aq);
rawmemchr() 関数はマッチするバイトが見つかった場合はマッチしたバイトへのポインタを返す。 マッチするバイトが見つからなかった場合、結果は不定である。
memrchr() は glibc バージョン 2.2 で初めて登場した。
memrchr() 関数は GNU 拡張であり、glibc 2.1.91 から使用可能である。
rawmemchr() 関数は GNU 拡張であり、glibc 2.1 から使用可能である。