| STRCPY(3) | Library Functions Manual | STRCPY(3) | 
stpcpy, stpncpy,
  strcpy, strncpy —
#include <string.h>
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);
stpcpy() 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.
The strings src and dst may not overlap.
strcpy() 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.
strcpy() 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”).
stpcpy() and stpncpy()
  functions first appeared in NetBSD 6.0.
strcpy() 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.
| April 1, 2015 | NetBSD 9.4 |