xref: /freebsd/lib/libc/string/strcpy.3 (revision 39ee7a7a6bdd1557b1c3532abf60d139798ac88b)
1.\" Copyright (c) 1990, 1991, 1993
2.\"	The Regents of the University of California.  All rights reserved.
3.\"
4.\" This code is derived from software contributed to Berkeley by
5.\" Chris Torek and the American National Standards Committee X3,
6.\" on Information Processing Systems.
7.\"
8.\" Redistribution and use in source and binary forms, with or without
9.\" modification, are permitted provided that the following conditions
10.\" are met:
11.\" 1. Redistributions of source code must retain the above copyright
12.\"    notice, this list of conditions and the following disclaimer.
13.\" 2. Redistributions in binary form must reproduce the above copyright
14.\"    notice, this list of conditions and the following disclaimer in the
15.\"    documentation and/or other materials provided with the distribution.
16.\" 3. Neither the name of the University nor the names of its contributors
17.\"    may be used to endorse or promote products derived from this software
18.\"    without specific prior written permission.
19.\"
20.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30.\" SUCH DAMAGE.
31.\"
32.\"     @(#)strcpy.3	8.1 (Berkeley) 6/4/93
33.\" $FreeBSD$
34.\"
35.Dd February 28, 2009
36.Dt STRCPY 3
37.Os
38.Sh NAME
39.Nm stpcpy, stpncpy, strcpy , strncpy
40.Nd copy strings
41.Sh LIBRARY
42.Lb libc
43.Sh SYNOPSIS
44.In string.h
45.Ft char *
46.Fn stpcpy "char * restrict dst" "const char * restrict src"
47.Ft char *
48.Fn stpncpy "char * restrict dst" "const char * restrict src" "size_t len"
49.Ft char *
50.Fn strcpy "char * restrict dst" "const char * restrict src"
51.Ft char *
52.Fn strncpy "char * restrict dst" "const char * restrict src" "size_t len"
53.Sh DESCRIPTION
54The
55.Fn stpcpy
56and
57.Fn strcpy
58functions
59copy the string
60.Fa src
61to
62.Fa dst
63(including the terminating
64.Ql \e0
65character.)
66.Pp
67The
68.Fn stpncpy
69and
70.Fn strncpy
71functions copy at most
72.Fa len
73characters from
74.Fa src
75into
76.Fa dst .
77If
78.Fa src
79is less than
80.Fa len
81characters long,
82the remainder of
83.Fa dst
84is filled with
85.Ql \e0
86characters.
87Otherwise,
88.Fa dst
89is
90.Em not
91terminated.
92.Sh RETURN VALUES
93The
94.Fn strcpy
95and
96.Fn strncpy
97functions
98return
99.Fa dst .
100The
101.Fn stpcpy
102and
103.Fn stpncpy
104functions return a pointer to the terminating
105.Ql \e0
106character of
107.Fa dst .
108If
109.Fn stpncpy
110does not terminate
111.Fa dst
112with a
113.Dv NUL
114character, it instead returns a pointer to
115.Li dst[n]
116(which does not necessarily refer to a valid memory location.)
117.Sh EXAMPLES
118The following sets
119.Va chararray
120to
121.Dq Li abc\e0\e0\e0 :
122.Bd -literal -offset indent
123char chararray[6];
124
125(void)strncpy(chararray, "abc", sizeof(chararray));
126.Ed
127.Pp
128The following sets
129.Va chararray
130to
131.Dq Li abcdef :
132.Bd -literal -offset indent
133char chararray[6];
134
135(void)strncpy(chararray, "abcdefgh", sizeof(chararray));
136.Ed
137.Pp
138Note that it does
139.Em not
140.Tn NUL
141terminate
142.Va chararray
143because the length of the source string is greater than or equal
144to the length argument.
145.Pp
146The following copies as many characters from
147.Va input
148to
149.Va buf
150as will fit and
151.Tn NUL
152terminates the result.
153Because
154.Fn strncpy
155does
156.Em not
157guarantee to
158.Tn NUL
159terminate the string itself, this must be done explicitly.
160.Bd -literal -offset indent
161char buf[1024];
162
163(void)strncpy(buf, input, sizeof(buf) - 1);
164buf[sizeof(buf) - 1] = '\e0';
165.Ed
166.Pp
167This could be better achieved using
168.Xr strlcpy 3 ,
169as shown in the following example:
170.Pp
171.Dl "(void)strlcpy(buf, input, sizeof(buf));"
172.Pp
173Note that because
174.Xr strlcpy 3
175is not defined in any standards, it should
176only be used when portability is not a concern.
177.Sh SEE ALSO
178.Xr bcopy 3 ,
179.Xr memccpy 3 ,
180.Xr memcpy 3 ,
181.Xr memmove 3 ,
182.Xr strlcpy 3 ,
183.Xr wcscpy 3
184.Sh STANDARDS
185The
186.Fn strcpy
187and
188.Fn strncpy
189functions
190conform to
191.St -isoC .
192The
193.Fn stpcpy
194and
195.Fn stpncpy
196functions conform to
197.St -p1003.1-2008 .
198.Sh HISTORY
199The
200.Fn stpcpy
201function first appeared in
202.Fx 4.4 ,
203and
204.Fn stpncpy
205was added in
206.Fx 8.0 .
207.Sh SECURITY CONSIDERATIONS
208The
209.Fn strcpy
210function is easily misused in a manner which enables malicious users
211to arbitrarily change a running program's functionality through a
212buffer overflow attack.
213