char *
stpcpy(char * restrict dst, const char * restrict src)
char *
stpncpy(char * restrict dst, const char * restrict src, size_t len)
char *
strcpy(char * restrict dst, const char * restrict src)
char *
strncpy(char * restrict dst, const char * restrict src, size_t len)
)
and
strcpy()
functions
copy the string
src
to
dst
(including the terminating
`\0'
character).
The
stpncpy()
and
strncpy()
functions copy at most
len
characters from
src
into
dst.
If
src
is less than
len
characters long,
the remainder of
dst
is filled with
`\0'
characters.
Otherwise,
dst
is
not
terminated.
)
and
strncpy()
functions
return
dst.
The
stpcpy()
and
stpncpy()
functions return a pointer to the terminating
`\0'
character of
dst.
If
stpncpy()
does not terminate
dst
with a
NUL
character, it instead returns a pointer to
dst[len]
(which does not necessarily refer to a valid memory location.)
abc\0\0\0'':
char chararray[6];
(void)strncpy(chararray, "abc", sizeof(chararray));
The following sets
chararray
to
``abcdef'':
char chararray[6];
(void)strncpy(chararray, "abcdefgh", sizeof(chararray));
Note that it does
not
NUL-terminate
chararray
because the length of the source string is greater than or equal
to the length parameter.
strncpy()
only
NUL-terminates
the destination string when the length of the source
string is less than the length parameter.
The following copies as many characters from
input
to
buf
as will fit and
NUL-terminates
the result.
Because
strncpy()
does
not
guarantee to
NUL-terminate
the string itself, this must be done explicitly.
char buf[1024];
(void)strncpy(buf, input, sizeof(buf) - 1);
buf[sizeof(buf) - 1] = '\0';
This could be better and more simply achieved using strlcpy(3), as shown in the following example:
(void)strlcpy(buf, input, sizeof(buf));
Note that because strlcpy(3) is not defined in any standards, it should only be used when portability is not a concern.
)
and
strncpy()
functions
conform to
ISO/IEC 9899:1999 (``ISO C99'') .
The
stpcpy()
and
stpncpy()
functions conform to
IEEE Std 1003.1-2008 (``POSIX.1'') .
)
and
stpncpy()
functions first appeared in
NetBSD6.0.
)
and
stpcpy()
functions are easily misused in a manner which enables malicious users
to arbitrarily change a running program's functionality through a
buffer overflow attack.