본문 바로가기
프로그래밍언어/C 언어

[혼자 공부하는 C 언어] 문자열을 붙이는 strcat, strncat 함수

by khsnote22 2022. 12. 10.

http://www.yes24.com/Product/Goods/74269921

 

혼자 공부하는 C 언어 - YES24

혼자 해도 충분하다! 1:1 과외하듯 배우는 C 프로그래밍 자습서이 책은 독학으로 C 언어를 배우는 입문자가 ‘꼭 필요한 내용을 제대로’ 학습할 수 있도록 구성했다. ‘무엇을’ ‘어떻게’ 학

www.yes24.com


strcpy 함수는 초기화된 문자열 지우고 새로운 문자열로 바꿀 때 사용합니다. 반면에 배열에 있는 문자열 뒤에 이어 붙일 때는 strcat 또는 strncat 함수를 사용합니다. 일종의 더하기 연산자 같은 역할이죠. 그렇다면 이 둘의 차이는 뭘까요? strcat 함수는 문자열을 이어 붙이며, strncat 함수는 지정한 문자의 개수만큼 붙입니다. 

// strcat, strncat 함수를 사용한 문자열 붙이기

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

int main(void)
{
	char str[80] = "straw"; // 문자열 초기화
	
	strcat(str, "berry"); // str 배열에 문자열 붙이기
	printf("%s\n", str);
	strncat(str, "piece", 3); // str 배열에 3개의 문자 붙이기
	printf("%s\n", str);

	return 0;
}

strcat 함수는 str 배열에 있는 문자열 뒤에 두 번째 인수로 주어지는 문자열을 이어 붙입니다. 구현 방식은 먼저 붙여넣을 배열에서 널 문자의 위치를 찾고 그 위치부터 붙여넣을 문자열을 복사합니다. 붙여넣기가 끝난 후에는 널 문자를 저장하여 마무리합니다.

 

strcat 함수를 사용할 때는 주의할 것이 있습니다.

주의1 strcat 함수는 메모리를 침범할 수 있습니다.

strcat 함수는 문자열을 덧붙이는 것이므로 붙여넣기가 되는 배열의 크기가 충분히 커야 합니다.

strcat 함수는 붙여넣을 공간의 주소를 증가시키므로 공간이 부족한 경우 할당하지 않은 다른 메모리 영역을 침범할 수 있습니다. 이 문제는 컴파일할 때 발견하지 못하고 프로그램이 완성된 후 실행할 때 발생하므로 더욱 주의해야 합니다.

주의2 strcat 함수를 사용할 때는 배열을 초기화해야 합니다.

strcat 함수로 붙여넣기 전에 먼저 널 문자의 위치를 찾으므로 반드시 초기화를 해야 합니다. 배열이 초기화되지 않으면 쓰레기 값의 중간부터 붙여넣을 가능성이 큽니다. 특별한 문자열로 초기화하거나 최소한 첫 번째 문자가 널 문자가 되도록 초기화합니다.