ft_strlcat 구현

yeonjkim·2021년 5월 26일
0

42seoul-libft

목록 보기
43/43

1. ft_strlcat 용도

* dst에 src를 이어붙이되, dst의 총 길이가 size보다 작아야 한다.

* dst의 길이 + 1('\0'포함) > size --> size + src의 길이 리턴

* dst의 길이 + 1('\0'포함) <= size --> dst의 길이 + src의 길이 리턴

2. ft_strlcat 프로토타입

size_t		ft_strlcat(char *dst, const char *src, size_t size)
char *dst : 이어붙여질 원래 문자열
const char *src : 이어붙일 문자열
size_t size : 원래 문자열과 이어붙인 문자열의 총 길이

3. 구현 시 유의사항

  • size는 '\0'을 포함한 길이라는 것에 유의한다.

  • 다른 mem함수들과는 다르게 src에서 '\0'이 나오는 것에 유의해야 한다.

  • dst의 마지막 부분에 '\0'을 넣어줘야 한다.

  • dstlen + index < size - 1로 하지 않고 dstlen + index + 1 < size 로 하는 이유는 size가 size_t이기 때문이다.

4. 코드 구현

#include "libft.h"

size_t          ft_strlcat(char *dst, const char *src, size_t size)
{
        size_t  index;
        size_t  dstlen;
        size_t  srclen;

        index = 0;
        dstlen = ft_strlen(dst);
        srclen = ft_strlen(src);
        if (size < dstlen + 1)
        {
                return (srclen + size);
        }
        while (dstlen + 1 + index < size && src[index] != '\0')
        {
                dst[index + dstlen] = src[index];
                index++;
        }
        dst[dstlen + index] = '\0';
        return (dstlen + srclen);
}

5. 코드 구현 방법

(1) src와 dst의 길이를 모두 구한다.
(2) size보다 dst의 길이 + 1이 더 큰 경우 src의 길이 + size를 리턴한다.
(3) dstlen + 1 + index가 size보다 크고, src가 '\0'이 아닐 때까지 복사한다.
(4) dst의 마지막 부분에 '\0'을 넣고 dstlen + srclen을 반환한다.

0개의 댓글