본문 바로가기
언어/C | C++

[C언어/초보를위한] 문자열을 붙이는 strcat, strncat 함수 구현하기

by 만결숭이 2022. 9. 19.
반응형

strcat 함수 구현 코드

char	*strcat(char *dest, char *src)
{
	int	i;
	int	di;

	i = 0;
	di = 0;
	while (dest[i] != '\0') //dest 문자열의 마지막 즉, '\0'(NULL문자)가 있는 위치에서 i가 멈춘다.
		i++;
	while (src[di] != '\0') //src 문자열의 크기만큼 하나씩 붙인다(복사해온다).
	{
		dest[i] = src[di];
		i++;
		di++;
	}
	dest[i] = '\0'; //문자열의 마지막을 알리는 '\0'(NULL문자)를 직접 넣어준다.
	return (dest);
}

strcat 함수 : dest 문자열에 src 문자열을 이어붙이는 함수

 

 

문자열을 조리할 때 머릿속에서만 굴리면 놓치는 부분이 꼭 생깁니다. 그래서 나는 컴퓨터만큼 똑똑하지 않다는 점을 항상 새깁니다. 간단한 문제라도 암산을 하기보다는 시각적으로 그림을 그려보는 습관이 중요한 듯 합니다.

 

 

지금부터 그림과 같이 임의의 데이터를 넣어 과정을 살펴보도록 할 것입니다.

dest = "abcdef"

src = "zzz"

두 개의 인덱스(i, di)는 모두 0인 초기 상태입니다.

 

 

첫 번째 while문이 다 돌아간 결과입니다.

i 인덱스가 dest의 '\0'을 가리키게 됩니다.

 

 

 

이 곳에서부터 src를 붙여넣기 할 것입니다.

현재 di 인덱스는 초기값인 0입니다.

 

 

 

 

i와 di가 동시에 1씩 증가하면서, 해당 src[di]값이 dest[i]자리에 들어가게 됩니다.

 

여기서 잘 생각해보아야 할 것은,

두 번째 while문이 끝난 시점에서는 dest[9]에 '\0'이 없습니다.

i 값이 9가 되었을 뿐, dest[9]의 데이터는 건드리지 않았다는 것입니다.

문자열의 마지막에는 '/0' (NULL) 값이 필요합니다.

 

그렇기때문에

dest[i] = '\0'

혹은

dest[i] = src[di]

이 마지막 한 줄이 추가되는 것입니다.

 

이로써 return 할 dest가 완성되었습니다 !

 

 

 

 

 

strncat 함수 구현 코드

char	*strncat(char *dest, char *src, unsigned int n)
{
	int	i;
	int	di;

	i = 0;
	di = 0;
	while (dest[i] != '\0')
		i++;
	while (src[di] != '\0' && n > 0)
	{
		dest[i] = src[di];
		i++;
		di++;
		n--;
	}
	dest[i] = '\0';
	return (dest);
}

strncat 함수 : dest 문자열에 src 문자열을 n의 길이만큼 이어붙이는 함수

과정은 위와 같습니다. 다만 n만큼을 붙인다는 점이 다르죠.

위의 과정을 이해하셨다면 충분히 이해하실 거라 생각하여 설명을 생략하도록 하겠습니다.

 

 

질문이 있으시면 댓글로 남겨주세요 !

반응형

댓글