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"));
'컴퓨터 > 프로그래밍' 카테고리의 다른 글
C언어 문자열 비교 함수 strcmp() (0) | 2020.03.15 |
---|---|
C언어 두개의 문자열을 합침 함수 strcat() (0) | 2020.03.15 |
C언어 시그널 집합에 모든 시그널 정보 추가 함수 sigfillset() (2) | 2020.03.15 |