---
name: "strdup"
section: "3"
platform: "macos"
package: "Libc"
version: "1752.120.2"
release: "macOS 26.5"
platforms: ["linux", "freebsd", "macos"]
url: "https://new.carta.tech/strdup"
---

# strdup(3)

save a copy of a string

## NAME

**strdup**, **strndup** – save a copy of a string

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

**#include \<string.h\>**

*char* *\**\

**strdup**(*const char \*s1*);

*char* *\**\

**strndup**(*const char \*s1*, *size\_t n*);

## DESCRIPTION

The **strdup**() function allocates sufficient memory for a copy of the string *s1*, does the copy, and returns a pointer to it. The pointer may subsequently be used as an argument to the function [free(3)](/free/3.md).

If insufficient memory is available, NULL is returned and *errno* is set to ENOMEM.

The **strndup**() function copies at most *n* characters from the string *s1* always NUL terminating the copied string.

## SEE ALSO

[free(3)](/free/3.md), [malloc(3)](/malloc/3.md)

## HISTORY

The **strdup**() function first appeared in 4.4BSD. The **strndup**() function was added in FreeBSD 7.2.
