memmem -- locate a substring


#define _GNU_SOURCE
#include <string.h>

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


memmem finds the start of the first occurrence of the substring needle of length needlelen in the memory area haystack of length haystacklen.

Return Value

memmem returns a pointer to the beginning of the substring, or NULL if the substring is not found.


memmem was broken in Linux libraries up to and including libc 5.0.9; there the needle and haystack arguments were interchanged, and a pointer to the end of the first occurrence of needle was returned. Since libc 5.0.9 is still widely used, this is a dangerous function to use.

Both old and new libc's have the bug that if needle is empty, haystack-1 is returned (instead of haystack). And glibc 2.0 makes it worse, returning a pointer to the last byte of haystack. This is fixed in glibc 2.1.