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