* dst에 src를 이어붙이되, dst의 총 길이가 size보다 작아야 한다.
* dst의 길이 + 1('\0'포함) > size --> size + src의 길이 리턴
* dst의 길이 + 1('\0'포함) <= size --> dst의 길이 + src의 길이 리턴
size_t ft_strlcat(char *dst, const char *src, size_t size)
char *dst : 이어붙여질 원래 문자열
const char *src : 이어붙일 문자열
size_t size : 원래 문자열과 이어붙인 문자열의 총 길이
size는 '\0'을 포함한 길이라는 것에 유의한다.
다른 mem함수들과는 다르게 src에서 '\0'이 나오는 것에 유의해야 한다.
dst의 마지막 부분에 '\0'을 넣어줘야 한다.
dstlen + index < size - 1로 하지 않고 dstlen + index + 1 < size 로 하는 이유는 size가 size_t이기 때문이다.
#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);
}
(1) src와 dst의 길이를 모두 구한다.
(2) size보다 dst의 길이 + 1이 더 큰 경우 src의 길이 + size를 리턴한다.
(3) dstlen + 1 + index가 size보다 크고, src가 '\0'이 아닐 때까지 복사한다.
(4) dst의 마지막 부분에 '\0'을 넣고 dstlen + srclen을 반환한다.