문제 개요
C 프로그래밍에서 strncat 라이브러리 함수를 사용하여 소스 문자열(source string)에서 대상 문자열(destination string)로 지정된 n개의 문자를 연결하는 프로그램을 작성하는 방법을 알아보겠습니다.
해결 방법
1. strcat 함수
strcat 함수는 두 개의 문자열을 하나로 합치거나 연결할 때 사용하는 가장 기본적인 문자열 연결 함수입니다.
- 두 문자열을 결합하거나 연결하는 데 사용됩니다.
- 대상 문자열(destination)의 크기는 반드시 소스 문자열(source)보다 커야 합니다.
- 연결된 최종 결과 문자열은 대상 문자열에 저장됩니다.
구문
strcat(대상_문자열, 소스_문자열);
예제 1
#include <string.h>
main(){
char a[50] = "Hello";
char b[20] = "Good Morning";
clrscr();
strcat(a, b);
printf("concatenated string = %s", a);
getch();
}
실행 결과
Concatenated string = Hello Good Morning
위 예제에서는 배열 b("Good Morning")의 전체 내용이 배열 a("Hello")의 끝에 그대로 붙으면서 "Hello Good Morning"이라는 하나의 문자열이 완성됩니다.
2. strncat 함수
strncat 함수는 한 문자열에서 지정한 개수(n)만큼의 문자만 골라서 다른 문자열에 연결할 때 사용합니다.
- 소스 문자열의 앞에서부터 n개의 문자만 대상 문자열 뒤에 이어 붙입니다.
- 대상 문자열의 크기는 연결 후 전체 길이를 담을 수 있을 만큼 충분히 커야 합니다.
- 연결된 최종 결과 문자열은 대상 문자열에 저장되며, 함수가 자동으로 널 종료 문자(\0)를 추가합니다.
구문
strncat(대상_문자열, 소스_문자열, n);
예제 2
#include <string.h>
main(){
char a[30] = "Hello";
char b[20] = "Good Morning";
clrscr();
strncat(a, b, 4);
a[9] = '\0';
printf("concatenated string = %s", a);
getch();
}
실행 결과
Concatenated string = Hello Good.
"Good Morning"에서 처음 4글자인 "Good"만 추출되어 "Hello" 뒤에 붙고, a[9] = '\0'; 으로 문자열의 끝을 명확히 표시하여 "Hello Good"라는 결과가 출력됩니다.
예제 3
#include<stdio.h>
#include<string.h>
void main(){
//소스 문자열과 대상 문자열 선언//
char source[45], destination[50];
//사용자로부터 소스 문자열과 대상 문자열 입력 받기//
printf("Enter the source string :");
gets(source);
printf("Enter the destination string before :");
gets(destination);
//위의 결과들을 연결//
destination[2]='\0';
strncat(destination, source, 2);
strncat(destination, &source[4], 1);
//대상 문자열 출력//
printf("The modified destination string :");
puts(destination);
}
실행 결과
Enter the source string :TutorialPoint Enter the destination string before :C Programming The modified destination string :C Tur
이 예제의 동작 과정을 단계별로 살펴보면 다음과 같습니다.
- destination[2] = '\0'; — "C Programming"을 앞의 2글자 "C "까지만 남기고 자릅니다.
- strncat(destination, source, 2); — 소스 문자열 "TutorialPoint"의 첫 2글자 "Tu"를 붙입니다.
- strncat(destination, &source[4], 1); — 소스 문자열의 5번째 문자 'r'을 하나 더 붙입니다.
그 결과 최종적으로 "C Tur"라는 수정된 대상 문자열이 출력됩니다.
참고 사항
- clrscr()과 getch()는 Turbo C 계열 컴파일러에서만 제공되는 함수입니다. GCC 등 현대적인 컴파일러 환경에서는 해당 줄을 삭제하거나 getchar()로 대체해야 합니다.
- gets() 함수는 버퍼 오버플로우 위험 때문에 C11 표준에서 제거되었으므로, 실제 개발에서는 fgets() 사용을 권장합니다.
- strncat은 n개의 문자를 붙인 후 널 문자를 자동으로 추가하므로, 대상 버퍼에는 (기존 문자열 길이 + n + 1)만큼의 공간이 반드시 확보되어 있어야 합니다.