CS/C

[2021W C프로그래밍과 실습][연습문제 10-9] 포인터 매개변수로 하는 strcat() 함수 구현하기

아이스얼그레이 2022. 2. 9. 22:22

[10-9] StrSource 배열의 문자열을 strDestination 배열에 추가하려고 한다. my_Strcat() 함수를 호출하여 문자열을 추가하는 기능을 구현한다. 이때 함수 호출 시 전달인자는 배열을 전달하고, my_Strcat() 함수는 배열의 시작주소를 매개변수로 받아 문자열을 추가해야한다.

1. main() 함수

#include <stdio.h>
#include <stdlib.h>
void my_Strcat(char* ptr_1, char* ptr_2);

int main()
{
	char strSource[20] = "dom";
	char strDestination[20] = "king";

	printf("Source : %s, Destination : %s\n\n", strSource, strDestination);

	my_Strcat(strSource, strDestination);

	printf("Source : %s, Destination : %s", strSource, strDestination);

	return 0;
}

my_Strcat() 함수를 선언하고 함수의 인수로 전달할 strSource와 strDestination을 정의한다.

2. my_Strcat() 함수

void my_Strcat(char* ptr_1, char* ptr_2)
{
	int i, cnt_1 = 0, cnt_2 = 0;

	while (*(ptr_1 + cnt_1) != NULL)
	{
		cnt_1++;
	}

	while (*(ptr_2 + cnt_2) != NULL)
	{
		cnt_2++;
	}

	for (i = 0; i < cnt_1; i++)
	{
		*(ptr_2 + cnt_2 + i) = *(ptr_1 + i);
	}

	*(ptr_2 + cnt_2 + cnt_1) = '\n';
}

우선 지역변수 i, cnt_1, cnt_2를 선언한다. i는 반복문을 돌릴 변수이고, cnt_1, cnt_2는 각각 ptr_1, ptr_2의 문자열의 길이를 구하기 위한 변수이다.

while문을 이용해 cnt_1, cnt_2를 각각 구한다.

그리고 for문을 사용해서 ptr_2 + cnt_2 + i가 가르키는 곳의 문자에 ptr + i가 가르키는 문자를 대입한다. 이때 문자열 index가 헷갈릴 수도 있으니 조심해야한다. 원래 문자열의 마지막 index에는 문자열의 종료를 알리는 \n이 들어가있는데, 대입하면서 날아갔으니 합친 문자열의 마지막 index에 \n을 넣어줬다.

결과