strcpy, strncpy — copy a string
#include <string.h>
char
*strcpy( |
char * | dest, |
const char * | src) ; |
char
*strncpy( |
char * | dest, |
const char * | src, | |
size_t | n) ; |
The strcpy
() function copies
the string pointed to by src
, including the terminating
null byte ('\0'), to the buffer pointed to by dest
. The strings may not
overlap, and the destination string dest
must be large enough to
receive the copy.
The strncpy
() function is
similar, except that at most n
bytes of src
are copied. Warning
: If there is no null
byte among the first n
bytes of src
, the string placed in
dest
will not be null
terminated.
If the length of src
is less than n
, strncpy
() pads the remainder of dest
with null bytes.
A simple implementation of strncpy
() might be:
char* strncpy(char *dest, const char *src, size_t n){ size_t i; for (i = 0 ; i < n && src[i] != '\0' ; i++) dest[i] = src[i]; for ( ; i < n ; i++) dest[i] = '\0'; return dest; }
Some programmers consider strncpy
() to be inefficient and error
prone. If the programmer knows (i.e., includes code to test!)
that the size of dest
is greater than the length of src
, then strcpy
() can be used.
If there is no terminating null byte in the first
n
characters of
src
, strncpy
() produces an unterminated string
in dest
. Programmers
often prevent this mistake by forcing termination as
follows:
strncpy(buf, str, n); if (n > 0) buf[n - 1]= '\0';
If the destination string of a strcpy
() is not large enough (that is, if
the programmer was stupid or lazy, and failed to check the
size before copying) then anything might happen. Overflowing
fixed length strings is a favorite cracker technique.
bcopy(3), memccpy(3), memcpy(3), memmove(3), wcscpy(3), wcsncpy(3)
|