kazmax - Linux で自宅サーバー

memmem - ライブラリコールの説明 - Linux コマンド集 一覧表

  1. 名前
  2. 書式
  3. 説明
  4. 返り値
  5. 準拠
  6. バグ
  7. 関連項目

名前

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 で修正された。

関連項目