memmem - ライブラリコールの説明 - Linux コマンド集 一覧表
名前
memmem - 部分文字列の位置を示す
書式
#include <string.h>
void *memmem(const void *haystack, size_t haystacklen,
const void *needle, size_t needlelen);
説明
memmem () 関数は、 haystacklen の大きさを持つメモリ領域 haystack の中で needlelen の大きさを持つ部分文字列 needle が 最初に現れる位置を見つける。
返り値
memmem () 関数は、部分文字列の開始を指すポインタを返し、もし部分文字列が 見つからない場合は NULL を返す。
準拠
この関数は GNU extension である。
バグ
Linux のライブラリに関していうと、 libc 5.0.9 と
それ以前のすべてのバージョンで、この関数は壊れている。
それらのライブラリでは `needle' と `haystack' 引数が
入れ替わっており、 needle
が最初に出現する部分の最後を
示すポインタが返されていたのである。
libc 5.0.9 は現在も広く使用されているので、この関数を使用するのは
危険である。
新旧両方の libc ライブラリが、
needle
が空の場合 (haystack
のかわりに) haystack
-1 が
返されるというバグを持っている。
そして、glibc 2.0 はより悪くなっており、
`haystack' の最後のバイトへのポインタを返す。
これは glibc 2.1 で修正された。