---
name: "strdupa"
section: "3"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["linux", "freebsd"]
url: "https://new.carta.tech/strdup"
---

# strdupa(3)

save a copy of a string

Part of [strdup(3)](/strdup/3.md).

## NAME

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

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

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

*char* *\**\

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

*char* *\**\

**strdupa**(*const char \*str*);

*char* *\**\

**strndup**(*const char \*str*, *size\_t len*);

*char* *\**\

**strndupa**(*const char \*str*, *size\_t len*);

## DESCRIPTION

The **strdup**() function allocates sufficient memory for a copy of the string *str*, does the copy, and returns a pointer to it. The memory is allocated with [malloc(3)](/malloc/3.md) and should be released with [free(3)](/free/3.md) when no longer needed.

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

The **strdupa**() function is identical to **strdup**() but allocates the memory with [alloca(3)](/alloca/3.md). Similarly, the **strndupa**() function is identical to **strndup**(), but allocates the memory with [alloca(3)](/alloca/3.md).

## RETURN VALUES

If insufficient memory is available, NULL is returned and *errno* is set to ENOMEM. Otherwise, the **strdup**() family of functions return a pointer to the copied string.

## SEE ALSO

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

## STANDARDS

The **strdup**() function is specified by IEEE Std 1003.1-2001 (“POSIX.1”). The **strndup**() function is specified by IEEE Std 1003.1-2008 (“POSIX.1”). The **strdupa**() and **strndupa**() functions are extensions, taken from glibc.

## HISTORY

The **strdup**() function first appeared in 4.3BSD-Reno. The **strndup**() function was added in FreeBSD 7.2. The **strdupa**() and **strndupa**() functions were added in FreeBSD 15.1.
