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

# asprintf(3)

print to allocated string

## NAME

asprintf, vasprintf - print to allocated string

## LIBRARY

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

## SYNOPSIS

```
#define _GNU_SOURCE         /* See feature_test_macros(7) */
#include <stdio.h>
```

**int asprintf(char \*\*restrict** *strp***, const char \*restrict** *fmt***, ...);** **int vasprintf(char \*\*restrict** *strp***, const char \*restrict** *fmt***,**               **va\_list** *ap***);**

## DESCRIPTION

The functions **asprintf**() and **vasprintf**() are analogs of [**sprintf**(3)](/sprintf/3.md) and [**vsprintf**(3)](/vsprintf/3.md), except that they allocate a string large enough to hold the output including the terminating null byte ('\\0'), and return a pointer to it via the first argument. This pointer should be passed to [**free**(3)](/free/3.md) to release the allocated storage when it is no longer needed.

## RETURN VALUE

When successful, these functions return the number of bytes printed, just like [**sprintf**(3)](/sprintf/3.md). On error, -1 is returned, *errno* is set to indicate the error, and the contents of *strp* are undefined.

## ERRORS

See [**sprintf**(3)](/sprintf/3.md) and [**malloc**(3)](/malloc/3.md).

## ATTRIBUTES

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

| | | |
| --- | --- | --- |
| **Interface** | **Attribute** | **Value** |
| **asprintf**(), **vasprintf**() | Thread safety | MT-Safe locale |

## VERSIONS

The FreeBSD implementation sets *strp* to NULL on error.

## STANDARDS

GNU, BSD.

## SEE ALSO

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