xref: /freebsd/lib/libc/string/strcpy.3 (revision 9336e0699bda8a301cd2bfa37106b6ec5e32012e)
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 August 9, 2001
36.Dt STRCPY 3
37.Os
38.Sh NAME
39.Nm 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 *dst" "const char *src"
47.Ft char *
48.Fn strcpy "char * restrict dst" "const char * restrict src"
49.Ft char *
50.Fn strncpy "char * restrict dst" "const char * restrict src" "size_t len"
51.Sh DESCRIPTION
52The
53.Fn stpcpy
54and
55.Fn strcpy
56functions
57copy the string
58.Fa src
59to
60.Fa dst
61(including the terminating
62.Ql \e0
63character.)
64.Pp
65The
66.Fn strncpy
67function copies at most
68.Fa len
69characters from
70.Fa src
71into
72.Fa dst .
73If
74.Fa src
75is less than
76.Fa len
77characters long,
78the remainder of
79.Fa dst
80is filled with
81.Ql \e0
82characters.
83Otherwise,
84.Fa dst
85is
86.Em not
87terminated.
88.Sh RETURN VALUES
89The
90.Fn strcpy
91and
92.Fn strncpy
93functions
94return
95.Fa dst .
96The
97.Fn stpcpy
98function returns a pointer to the terminating
99.Ql \e0
100character of
101.Fa dst .
102.Sh EXAMPLES
103The following sets
104.Va chararray
105to
106.Dq Li abc\e0\e0\e0 :
107.Bd -literal -offset indent
108char chararray[6];
109
110(void)strncpy(chararray, "abc", sizeof(chararray));
111.Ed
112.Pp
113The following sets
114.Va chararray
115to
116.Dq Li abcdef :
117.Bd -literal -offset indent
118char chararray[6];
119
120(void)strncpy(chararray, "abcdefgh", sizeof(chararray));
121.Ed
122.Pp
123Note that it does
124.Em not
125.Tn NUL
126terminate
127.Va chararray
128because the length of the source string is greater than or equal
129to the length argument.
130.Pp
131The following copies as many characters from
132.Va input
133to
134.Va buf
135as will fit and
136.Tn NUL
137terminates the result.
138Because
139.Fn strncpy
140does
141.Em not
142guarantee to
143.Tn NUL
144terminate the string itself, this must be done explicitly.
145.Bd -literal -offset indent
146char buf[1024];
147
148(void)strncpy(buf, input, sizeof(buf) - 1);
149buf[sizeof(buf) - 1] = '\e0';
150.Ed
151.Pp
152This could be better achieved using
153.Xr strlcpy 3 ,
154as shown in the following example:
155.Pp
156.Dl "(void)strlcpy(buf, input, sizeof(buf));"
157.Pp
158Note that because
159.Xr strlcpy 3
160is not defined in any standards, it should
161only be used when portability is not a concern.
162.Sh SECURITY CONSIDERATIONS
163The
164.Fn strcpy
165function is easily misused in a manner which enables malicious users
166to arbitrarily change a running program's functionality through a
167buffer overflow attack.
168(See
169the FSA
170and
171.Sx EXAMPLES . )
172.Sh SEE ALSO
173.Xr bcopy 3 ,
174.Xr memccpy 3 ,
175.Xr memcpy 3 ,
176.Xr memmove 3 ,
177.Xr strlcpy 3
178.Sh STANDARDS
179The
180.Fn strcpy
181and
182.Fn strncpy
183functions
184conform to
185.St -isoC .
186The
187.Fn stpcpy
188function is an MS-DOS and GNUism.
189The
190.Fn stpcpy
191function
192conforms to no standard.
193.Sh HISTORY
194The
195.Fn stpcpy
196function first appeared in
197.Fx 4.4 ,
198coming from 1998-vintage Linux.
199