---
name: "memmem"
section: "3"
platform: "linux"
package: "man-pages"
version: "6.19-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux", "freebsd", "macos"]
url: "https://new.carta.tech/memmem"
---

# memmem(3)

memory search submemory

## NAME

memmem - memory search submemory

## LIBRARY

Standard C library (*libc*, *-lc*)

## SYNOPSIS

```
#define _GNU_SOURCE         /* See feature_test_macros(7) */
#include <string.h>  // see memory.h(3head)
```

**void \*memmem(**size\_t hsize, size\_t nsize;              **const void** *haystack***\[***hsize***\], size\_t** *hsize***,**              **const void** *needle***\[***nsize***\], size\_t** *nsize***);**

## DESCRIPTION

The **memmem**() function finds the start of the first occurrence of the substring *needle* of size *nsize* in the memory area *haystack* of size *hsize*.

## RETURN VALUE

The **memmem**() function returns a pointer to the beginning of the substring, or NULL if the substring is not found.

## ATTRIBUTES

For an explanation of the terms used in this section, see [**attributes**(7)](/attributes/7.md).

| | | |
| --- | --- | --- |
| **Interface** | **Attribute** | **Value** |
| **memmem**() | Thread safety | MT-Safe |

## STANDARDS

None.

## HISTORY

musl libc 0.9.7; FreeBSD 6.0, OpenBSD 5.4, NetBSD, Illumos.

## BUGS

In glibc 2.0, if *needle* is empty, **memmem**() returns a pointer to the last byte of *haystack*. This is fixed in glibc 2.1.

## SEE ALSO

[**memory.h**(3head)](/memory.h/3head.md)
