stpncpy(3)

#include <string.h>

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

stpncpy(3)함수는 src문자열을 dest에 n바이트를 복사하고 문자열의 끝 다음인 0x00의 위치에 대한 pointer를 return합니다. src의 길이가 n과 같거나 긴 경우에는 n바이트를 복사하고 dest + n의 위치를 return 합니다. 이 경우 dest는 null-terminated 문자열이 아닙니다. src의 길이가 n보다 작은 경우는 dest에 문자열을 복사하고 n바이트까지 0x00으로 채웁니다. 그리고 dest + strlen(src)를 return합니다. dest는 무조건 n바이트를 쓰기때문에 n바이트 이상의 buffer를 가지고 있어야 합니다. 

 

stpncpy(3)함수는 strncpy(3)함수와 비슷한 기능을 합니다. 차이점은 strncpy(3)는 복사된 dest의 시작 위치를 return하고

이 함수는 복사된 dest 문자열의 끝 위치를 return합니다.

 

따라서, 이 함수는 계속 추가로 복사하는 strncat(3)를 대신해서 사용하기에 편리합니다. strncat(3)은 문자열을 추가하기 위하여 처음부터 문자열의 끝까지 찾아야 하지만, 이 함수를 이용하면 return값에 대해서 계속 copy를 하면 되기 때문에 성능면에서 유리합니다.

 

 

파라미터

dest
    - 데이터가 복제될 buffer
src
    - 데이터를 복제할 원본 문자열
n
    - 복사할 문자열의 바이트 수

 

RETURN

strlen(src) < n
    - 문자열의 끝에 있는 0x00의 위치에 대한 pointer
    - 즉, dest + strlen(src)를 return 함.

strlen(src) >= n
    - n바이트가 복제된 다음 위치
      즉, dest + n

 


활용 예제

 

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

int main(void)
{
   char buffer[20];
   char *to = buffer;

   to = stpncpy(to, "foo", 2);
   to = stpncpy(to, "bar", 8);
   printf("%s\n", buffer);
 
   to = buffer;
   to = stpncpy(to, "foo", 8);
   to = stpncpy(to, "bar", 8);

   printf("%s\n", buffer);
   return 0;
}

결과 
fobar
foobar

 

블로그 이미지

자연&사람

행복한 개발자 programmer since 1995.

댓글을 달아 주세요