xref: /freebsd/lib/libc/string/strcpy.3 (revision eb6d21b4ca6d668cf89afd99eef7baeafa712197)
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.\" 4. 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 SECURITY CONSIDERATIONS
178The
179.Fn strcpy
180function is easily misused in a manner which enables malicious users
181to arbitrarily change a running program's functionality through a
182buffer overflow attack.
183(See
184the FSA
185and
186.Sx EXAMPLES . )
187.Sh SEE ALSO
188.Xr bcopy 3 ,
189.Xr memccpy 3 ,
190.Xr memcpy 3 ,
191.Xr memmove 3 ,
192.Xr strlcpy 3 ,
193.Xr wcscpy 3
194.Sh STANDARDS
195The
196.Fn strcpy
197and
198.Fn strncpy
199functions
200conform to
201.St -isoC .
202The
203.Fn stpcpy
204and
205.Fn stpncpy
206functions conform to
207.St -p1003.1-2008 .
208.Sh HISTORY
209The
210.Fn stpcpy
211function first appeared in
212.Fx 4.4 ,
213and
214.Fn stpncpy
215was added in
216.Fx 8.0 .
217