본문으로 바로가기
homeimage
  1. Home
  2. 컴퓨터/프로그래밍
  3. C언어 길이를 지정하여 두 개의 문자열 합침 함수 strncat()

C언어 길이를 지정하여 두 개의 문자열 합침 함수 strncat()

· 댓글개 · 바다야크

C함수 길이를 지정하여 두 개의 문자열 합침 strncat()

2개의 문자열을 인수로 받아서 1개의 문자열로 합칩니다.

  • 헤더: string.h
  • 형태: char * strncat( char *dest, const char *src, size_t n)
  • 인수: char *dest 연결될 문자열
    char *src 붙여 넣기할 문자열
    size_t sz src 문자열에서 붙여 넣기할 문자 개수
  • 반환: 2개의 문자열을 합쳐진 문자열을 반환. 즉, 첫 번째 인수인 dest 포인터

strcat()와 마찬가지로 2개의 문자열을 인수로 받아서 1개의 문자열로 합칩니다. 차이라면 길이를 지정하여 복사할 2번째 문자열의 앞에서 몇 번째까지를 붙여 넣기 할지를 지정할 수 있습니다.

주의해야할 점

은 합쳐진 문자열은 새로운 메모리를 생성하지 않고 첫 번째 인수의 포인터에 저장된다는 것입니다. 그러므로 첫 번째 인수의 포이터나 배열은 충분한 메모리를 확보해야 합니다. strncat()는 strcat()처럼 첫 번째 인수의 메모리에서 '\0'을 찾은 다음, 그 부분부터 2번째 인수의 문자열의 문자를 지정한 개수 만큼 차례로 복사해 나갑니다.

C언어 strncat() 함수 예제

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

int main( void)
{
   char  str1[50] = "badayak";
   char  str2[50] = "badayak";
                     
   printf( "%s\n", strncat( str1, ".com good!!", 11));
   printf( "%s\n", strncat( str2, ".com good!!", 4 ));

   return 0;
}

C언어 strncat() 예제 실행 결과

]$ ./a.out
badayak.com good!!
badayak.com
]$

주의

위의 예제에서는 "badayak" 문자열의 변수가 50byte로 ".com" 합쳐져도 공간이 충분합니다. 만일 아래의 예처럼 첫 번째 인수가 충분한 공간을 잡아 두지 않는다면 어떻게 될까요?

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

int main( void)
{
   char  str[] = "badayak";
                     
   strncat( str, ".com good!!",  4);           
   printf( "%s\n", str);
   return 0;
}

실행 결과

]$ ./a.out
badayak.com
*** stack smashing detected ***: ./a.out terminated
중지됨 (core dumped)
]$

참고

이미 알고 있는 첫 번째 포인터를 왜 반환할까요? 그것은 아래와 같이 함수 호출과 함께 문자열로 처리할 수 있기 때문입니다.

strcat( str, ".com");           
printf( "%s\n", str);

이 코드를 아래와 같이 처리할 수 있습니다.

printf( "%s\n", strcat( str, ".com"));
SNS 공유하기
💬 댓글 개
최근글
이모티콘창 닫기
울음
안녕
감사해요
당황
피폐

이모티콘을 클릭하면 댓글창에 입력됩니다.