반응형
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만큼을 붙인다는 점이 다르죠.
위의 과정을 이해하셨다면 충분히 이해하실 거라 생각하여 설명을 생략하도록 하겠습니다.
질문이 있으시면 댓글로 남겨주세요 !
반응형
'언어 > C | C++' 카테고리의 다른 글
[C언어/초보를위한] 문자열을 복사하는 strcpy, strncpy 함수 구현하기 (0) | 2022.06.04 |
---|---|
[C언어/초보를위한] 몫, 나머지를 구하여 포인터로 담는 div, mod 함수 구현하기 / 왜 포인터를 쓸까? (0) | 2022.05.29 |
[C언어/초보를위한] 정수의 배열을 뒤집는 함수 구현하기 (0) | 2022.01.27 |
[C언어/초보를위한] 문자열의 길이를 반환하는 strlen 함수 구현하기 (0) | 2022.01.27 |
[C언어/초보를위한] 문자열을 출력하는 putstr 함수 구현하기 (0) | 2022.01.27 |
댓글