---
name: "memccpy"
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/memccpy"
---

# memccpy(3)

memory until-and-including-character copy

## NAME

memccpy - memory until-and-including-character copy

## LIBRARY

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

## SYNOPSIS

```
#include <string.h>  // see memory.h(3head)
```

**void \*memccpy(**size\_t n;               **void** *dest***\[restrict** *n***\], const void** *src***\[restrict** *n***\],**               **int** *c***, size\_t** *n***);**

## DESCRIPTION

The **memccpy**() function copies no more than *n* bytes from memory area *src* to memory area *dest*, stopping when the character *c* is found (*c* is copied).

If the memory areas overlap, the results are undefined.

## RETURN VALUE

The **memccpy**() function returns a pointer to the next character in *dest* after *c*, or NULL if *c* was not found in the first *n* characters of *src*.

## ATTRIBUTES

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

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

## STANDARDS

POSIX.1-2008.

## HISTORY

POSIX.1-2001, SVr4, 4.3BSD.

## CAVEATS

This function has recently (since C23) started being misused for copying strings with truncation. That's not its intended use, and is most likely to result in bugs if used for that. This function was designed for the quite different (and niche) task of implementing [**fgets**(3)](/fgets/3.md).

## SEE ALSO

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