Provided by: manpages-ja-dev_0.5.0.0.20140515+dfsg-2_all bug

名前

       memmem - 部分文字列の位置を示す

書式

       #define _GNU_SOURCE         /* feature_test_macros(7) 参照 */
       #include <string.h>

       void *memmem(const void *haystack, size_t haystacklen,
                    const void *needle, size_t needlelen);

説明

       memmem()  関数は、 haystacklen の大きさを持つメモリ領域 haystack の中で needlelen の大きさ
       を持つ部分文字列 needle が 最初に現れる位置を見つける。

返り値

       memmem()  関数は、部分文字列の開始を指すポインタを返し、もし部分文字列が  見つからない場合
       は NULL を返す。

属性

   マルチスレッディング (pthreads(7) 参照)
       memmem() 関数はスレッドセーフである。

準拠

       この関数は GNU による拡張である。

バグ

       Linux  のライブラリに関していうと、 libc 5.0.9 と それ以前のすべてのバージョンで、この関数
       は壊れている。 それらのライブラリでは needlehaystack 引数が 入れ替わっており、  needle
       が最初に出現する部分の最後を 示すポインタが返されていたのである。

       新旧両方の  libc ライブラリが、 needle が空の場合 (haystack のかわりに) haystack-1 が 返さ
       れるというバグを持っている。 そして、glibc 2.0 ではさらに悪くなっており、 haystack  の最後
       のバイトへのポインタを返す。 これは glibc 2.1 で修正された。

関連項目

       strstr(3)

この文書について

       この  man ページは Linux man-pages プロジェクトのリリース 3.65 の一部 である。プロジェクト
       の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。