strncat(3) 맨 페이지 - 윈디하나의 솔라나라

개요

섹션
맨 페이지 이름
검색(S)

strncat(3)

STRCAT(3)                  Linux Programmer's Manual                 STRCAT(3)



NAME
       strcat, strncat - concatenate two strings

SYNOPSIS
       #include <string.h>

       char *strcat(char *dest, const char *src);

       char *strncat(char *dest, const char *src, size_t n);

DESCRIPTION
       The  strcat() function appends the src string to the dest string, over‐
       writing the terminating null byte ('\0') at the end of dest,  and  then
       adds  a  terminating  null  byte.  The strings may not overlap, and the
       dest string must have enough space for the  result.   If  dest  is  not
       large  enough, program behavior is unpredictable; buffer overruns are a
       favorite avenue for attacking secure programs.

       The strncat() function is similar, except that

       *  it will use at most n bytes from src; and

       *  src does not need to be null-terminated if it  contains  n  or  more
          bytes.

       As  with  strcat(),  the resulting string in dest is always null-termi‐
       nated.

       If src contains n or more bytes, strncat() writes n+1 bytes to dest  (n
       from  src plus the terminating null byte).  Therefore, the size of dest
       must be at least strlen(dest)+n+1.

       A simple implementation of strncat() might be:

           char *
           strncat(char *dest, const char *src, size_t n)
           {
               size_t dest_len = strlen(dest);
               size_t i;

               for (i = 0 ; i < n && src[i] != '\0' ; i++)
                   dest[dest_len + i] = src[i];
               dest[dest_len + i] = '\0';

               return dest;
           }

RETURN VALUE
       The strcat() and strncat() functions return a pointer to the  resulting
       string dest.

ATTRIBUTES
       For   an   explanation   of   the  terms  used  in  this  section,  see
       attributes(7).

       allbox; lbw19 lb lb l  l  l.   Interface Attribute Value  T{  strcat(),
       strncat() T}   Thread safety  MT-Safe

CONFORMING TO
       POSIX.1-2001, POSIX.1-2008, C89, C99, SVr4, 4.3BSD.

NOTES
       Some  systems  (the  BSDs,  Solaris,  and others) provide the following
       function:

           size_t strlcat(char *dest, const char *src, size_t size);

       This function appends the null-terminated  string  src  to  the  string
       dest,  copying  at most size-strlen(dest)-1 from src, and adds a termi‐
       nating null byte to the result, unless size is less than  strlen(dest).
       This  function  fixes  the  buffer overrun problem of strcat(), but the
       caller must still handle the possibility of data loss if  size  is  too
       small.   The  function returns the length of the string strlcat() tried
       to create; if the return value is greater than or equal to  size,  data
       loss  occurred.  If data loss matters, the caller must either check the
       arguments before the call, or test the function  return  value.   strl‐
       cat()  is not present in glibc and is not standardized by POSIX, but is
       available on Linux via the libbsd library.

EXAMPLE
       Because strcat() and strncat() must find the null byte that  terminates
       the  string  dest  using  a  search that starts at the beginning of the
       string, the execution time of these functions scales according  to  the
       length  of  the  string  dest.  This can be demonstrated by running the
       program below.  (If the goal is to concatenate many strings to one tar‐
       get,  then  manually  copying  the  bytes from each source string while
       maintaining a pointer to the end of the target string will provide bet‐
       ter performance.)

   Program source

       #include <string.h>
       #include <time.h>
       #include <stdio.h>

       int
       main(int argc, char *argv[])
       {
       #define LIM 4000000
           int j;
           char p[LIM + 1];    /* +1 for terminating null byte */
           time_t base;

           base = time(NULL);
           p[0] = '\0';

           for (j = 0; j < LIM; j++) {
               if ((j % 10000) == 0)
                   printf("%d %ld\n", j, (long) (time(NULL) - base));
               strcat(p, "a");
           }
       }

SEE ALSO
       bcopy(3),  memccpy(3),  memcpy(3),  strcpy(3),  string(3),  strncpy(3),
       wcscat(3), wcsncat(3)

COLOPHON
       This page is part of release 5.02 of the Linux  man-pages  project.   A
       description  of  the project, information about reporting bugs, and the
       latest    version    of    this    page,    can     be     found     at
       https://www.kernel.org/doc/man-pages/.



GNU                               2019-08-02                         STRCAT(3)
맨 페이지 내용의 저작권은 맨 페이지 작성자에게 있습니다.
RSS ATOM XHTML 5 CSS3