1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
'\" t
.\" Copyright, the authors of the Linux man-pages project
.\"
.\" SPDX-License-Identifier: Linux-man-pages-copyleft
.\"
.TH strdup 3 2025-06-28 "Linux man-pages (unreleased)"
.SH NAME
strdup, strndup, strdupa, strndupa \- duplicate a string
.SH LIBRARY
Standard C library
.RI ( libc ,\~ \-lc )
.SH SYNOPSIS
.nf
.B #include <string.h>
.P
.BI "char *strdup(const char *" s );
.P
.BR "char *strndup(" "size_t n;"
.BI " const char " s [ n "], size_t " n );
.BI "char *strdupa(const char *" s );
.BR "char *strndupa(" "size_t n;"
.BI " const char " s [ n "], size_t " n );
.fi
.P
.RS -4
Feature Test Macro Requirements for glibc (see
.BR feature_test_macros (7)):
.RE
.P
.BR strdup ():
.nf
_XOPEN_SOURCE >= 500
.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
|| /* Since glibc 2.12: */ _POSIX_C_SOURCE >= 200809L
|| /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
.fi
.P
.BR strndup ():
.nf
Since glibc 2.10:
_POSIX_C_SOURCE >= 200809L
Before glibc 2.10:
_GNU_SOURCE
.fi
.P
.BR strdupa (),
.BR strndupa ():
.nf
_GNU_SOURCE
.fi
.SH DESCRIPTION
The
.BR strdup ()
function returns a pointer to a new string which
is a duplicate of the string
.IR s .
Memory for the new string is
obtained with
.BR malloc (3),
and can be freed with
.BR free (3).
.P
The
.BR strndup ()
function is similar, but copies at most
.I n
bytes.
If
.I s
is longer than
.IR n ,
only
.I n
bytes are copied, and a terminating null byte (\[aq]\[rs]0\[aq]) is added.
.P
.BR strdupa ()
and
.BR strndupa ()
are similar, but use
.BR alloca (3)
to allocate the buffer.
.SH RETURN VALUE
On success, the
.BR strdup ()
function returns a pointer to the duplicated
string.
It returns NULL if insufficient memory was available, with
.I errno
set to indicate the error.
.SH ERRORS
.TP
.B ENOMEM
Insufficient memory available to allocate duplicate string.
.SH ATTRIBUTES
For an explanation of the terms used in this section, see
.BR attributes (7).
.TS
allbox;
lbx lb lb
l l l.
Interface Attribute Value
T{
.na
.nh
.BR strdup (),
.BR strndup (),
.BR strdupa (),
.BR strndupa ()
T} Thread safety MT-Safe
.TE
.SH STANDARDS
.TP
.BR strdup ()
.TQ
.BR strndup ()
POSIX.1-2008.
.TP
.BR strdupa ()
.TQ
.BR strndupa ()
GNU.
.SH HISTORY
.TP
.BR strdup ()
SVr4, 4.3BSD-Reno, POSIX.1-2001.
.TP
.BR strndup ()
POSIX.1-2008.
.TP
.BR strdupa ()
.TQ
.BR strndupa ()
GNU.
.SH SEE ALSO
.BR alloca (3),
.BR calloc (3),
.BR free (3),
.BR malloc (3),
.BR realloc (3),
.BR string (3),
.BR wcsdup (3)
|