컴퓨터 프로그래밍/C

C언어 문자열 처리 함수 (strcat() : 문자열 이어 붙이기)

나노콛 2019. 7. 23. 11:36

strcat() 문자열 이어 붙이기 함수

 

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

int main()
{
	char dest[20] = "Hello";
	char cat[10] = " World";
	char* tmp = NULL;

	printf("dest : %s \n", dest);

	tmp = strcat(dest,cat);

	printf("tmp : %s\n", tmp);
	printf("dest : %s\n", dest);
	printf("tmp Addr : %p dest Addr : %p\n", tmp, dest);

	return 0;
}

strcat()는 인자가 2개 필요하며
앞의 인자에 뒤의 인자의 내용을 이어 붙입니다.

앞의 인자는 문자열 주소
뒤의 인자도 문자열 주소가 필요합니다.

strcat()의 반환값은 문자열 주소값 입니다.


strcat() 직접 구현해보기

1. 리턴 타입
2. 인자 형태
3. 로직 구현 

 

리턴 타입은 char * 형이 되겠죠
인자 형태는 char * 형이 필요합니다.

 

char * MyStrcat(char * dest, char * cat)
{

}

로직에 대해 생각해보면

dest의 끝부터 cat의 처음부터 끝을 기록하는 형태가 되어야 합니다.

그러면
dest를 null 문자까지 반복을 하면서 dest의 주소를 증가하여
null 문자 전까지 주소를 증가하고 그 뒤부터 cat의 처음부터 null 문자까지 넣으면 원하는 대로 될 수 있을 것 같습니다.

 

char * MyStrcat(char* dest, char* cat)
{
	char* tmp = dest; //dest의 주소를 tmp에 저장
	while (*dest) //dest의 값이 null이 올때까지 반복
	{
		dest++;  //dest 주소 증가
	}
            //dest의 값이 null을 만나면 위의 반복문을 빠져나오며
           //dest의 주소는 null전 까지 증가 되어있다.

	while (*cat) //cat의 값이 null이 올때까지 반복
	{
		*dest = *cat;  //dest의 현재주소의 값에 cat의 값을 넣는다.
		dest++;        //dest 주소 증가
		cat++;         //cat 주소 증가
	}

	return tmp; //dest의 주소는 증가 되어서 전체 주소가 필요하기 때문에 저장해뒀던 tmp를 반환
}