memory.h(3head) memory.h(3head)

memory.h - memory operations

Standard C library (libc-lc)

#include <memory.h>

bzero(3)
explicit_bzero(3)
memset(3)
memset_explicit(3)

memmove(3)
memcpy(3)
mempcpy(3)
memccpy(3)
strncpy(3)
stpncpy(3)

strncat(3)

strndup(3)
strndupa(3)

memeq(3)
memcmp(3)
strncmp(3)
strncasecmp(3)
memchr(3)
memrchr(3)
memmem(3)

In some systems (Illumos), <memory.h> contains only a few of these functions, and thus <string.h> is needed.

BSD.

These functions are also provided in <string.h>, as specified by ISO C. This is a historic mistake maintained for compatibility reasons; these functions aren't string APIs.

SVr1, 4.3BSD.

System V (1983) introduced an initial set of mem* functions in a <memory.h> header file. 4.3BSD (1986) adopted them.

SVID Issue 1 (1985) standardized this header file, but stated that the functions would be moved to <string.h>.

XPG Issue 3 (1989) listed <memory.h> as WITHDRAWN, and stated that the functions had been moved to <string.h>.

C89 didn't standardize this header file and instead specified all these functions in <string.h>.

This merge of header files has historically confused programmers about the real purpose of these functions.

Most C libraries, including the BSDs, glibc, musl, Bionic, and Illumos continue to provide <memory.h>.

gnulib doesn't provide it, though, and instead uses <string.h>.

string(3), string_copying(7)

2026-08-10 Linux man-pages 6.19