12-1-나.문자열 연결

문자열 연결이란 한 문자열 끝에 다른 문자열을 덧붙이는 것이다. 예를 들어 str1이 "abc"이고 str2가 "def"일 때 이 둘을 연결하면 "abcdef"가 될 것이다. 개념적으로 이해하기 쉬운 동작이므로 함수 자체도 무척이나 쉽다. 문자열 연결 함수에는 다음 두 가지가 있다.

 

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

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

 

strcat 함수는 dest 문자열 뒤에 src문자열을 덧붙인다. 이론적인 설명보다 실제 코드를 보면 이해하기 쉬울 것이다.

 

char dest[20]="이순신";

char src[]=" 장군";

strcat(dest,src);

 

dest에 들어 있는 "이순신" 문자열 뒤에 " 장군"이라는 문자열을 덧붙였으므로 dest는 "이순신 장군"이 될 것이다. 이 함수의 동작을 그림으로 그려 보면 다음과 같다.

dest의 끝에 있던 널 종료 문자 자리에 src 문자열이 추가된다. dest의 끝에 있는 널 종료 문자는 삭제되지만 src문자열 끝에 있는 널 종료 문자가 같이 추가되므로 연결 후 dest는 완전한 문자열이 된다. strcpy 함수에서와 마찬가지로 strcat 함수도 배열의 끝 점검을 하지 않고 무조건 문자열을 연결하므로 dest는 합쳐질 문자열의 길이까지 고려하여 충분한 크기를 가지고 있어야 한다. 그렇지 않으면 dest 뒤쪽의 메모리가 파괴된다.

strncat 함수는 문자열을 합치되 합칠 문자열의 개수를 지정할 수 있다. 위의 예에서 strncat(dest,src,3)을 호출하면 src의 앞쪽 세 문자인 " 장"만 연결되어 dest는 "이순신 장"이 된다. 이 두 함수의 관계는 strcpy, strncpy 함수의 관계와 유사하되 strncpy 함수는 널 종료 문자를 붙이지 않는 반면 strncat 함수는 일부 문자열만 연결하더라도 항상 널 종료 문자를 뒤에 붙인다는 점이 다르다.

strcat 함수는 두 개의 문자열을 하나로 합치는데 이 함수를 여러 번 호출하면 복수 개의 문자열을 하나로 합칠 수도 있다. 다음 예제는 strcat 함수를 사용하여 여러 개의 문자열을 연결하는 예를 보여준다.

 

: strcat

#include <Turboc.h>

#include <string.h>

 

void main(void)

{

     char si[]="서울";

     char ku[]="동대문";

     char dong[]="회기";

     char juso[64];

 

     strcpy(juso,si);

     strcat(juso,"시 ");

     strcat(juso,ku);

     strcat(juso,"구 ");

     strcat(juso,dong);

     strcat(juso,"동");

 

     puts(juso);

}

 

, 구, 동의 정보를 각각 입력받았을 때 이 문자열들과 중간 중간의 문자열 상수들을 하나로 연결하여 완성된 문자열을 만들어 출력하였다. 출력 결과는 "서울시 동대문구 회기동"이 된다. 이렇게 여러 개의 문자열을 합칠 때는 다음에 배울 sprintf 함수가 더 편리하다.