MEMMEM(3)

НАЗВАНИЕ
memmem - ведет поиск подстроки

СИНТАКСИС
#define _GNU_SOURCE
#include <string.h>

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

ОПИСАНИЕ
Функция memmem() ищет первое совпадение с подстрокой needle длиной needlelen в области памяти haystack длиной haystacklen.

ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
Функция memmem() возвращает указатель на начало подстроки или NULL, если подстрока не найдена.

СООТВЕТСТВИЕ СТАНДАРТАМ
Эта функция является расширением GNU.

НАЙДЕННЫЕ ОШИБКИ
Данная функция была "разбросана" по библиотекам Linux до версии libc 5.0.9 включительно; аргументы "needle" и "haystack" менялись местами, при этом возвращался указатель на конец первого совпадения needle. Начиная с версий libc 5.0.9, она до сих пор широко используется, но является опасной для работы.
И старые, и новые библиотеки libc содержат такую ошибку: если needle "пустое", то возвращается haystack-1 (вместо haystack). А в библиотеке glibc (2.0.5) ситуация ухудшается: возвращается указатель на последний байт `haystack'. Это исправлено в glibc 2.1.

СМ. ТАКЖЕ
strstr(3)