ft_strlcat.c - chanhl22/libft GitHub Wiki
13 #include "libft.h"
14
15 size_t ft_strlcat(char *dst, const char *src, size_t size)
16 {
17 size_t i;
18 size_t s_len;
19 size_t d_len;
20
21 i = 0;
22 s_len = ft_strlen(src); //길이를 담을 변수
23 d_len = ft_strlen(dst); // ''
24 if (size < d_len + 1) //size가 작을 때 반환값 (+1은 strlen에서 안구해지는 NULL때문에)
25 return (size + s_len);
26 if (size > d_len + 1) //size가 더 클때 반환값이 다르다.
27 {
28 while (src[i] != '\0' && d_len + i < size - 1) // src에 데이터가 있고,
d_len가 size보다 작아야하는데
여기서 size는 dst 길이 + 붙일 데이터 길이 + NULL이므로 NULL이 포함되어 있다.
NULL을 제외해준다.
29 {
30 dst[d_len + i] = src[i];
31 i++;
32 }
33 }
34 dst[d_len + i] = 0; //NULL을 붙여준다.
35 return (d_len + s_len);
36 }
src가 goods일때 src는 5이고 size가 6이라면 dst의 반환 문자열은 goods 그대로 나온다. while 조건문을 거치지 않고 마지막 조건문을 거쳐 바로 리턴이 된다. 만약 size가 5라면 조건문을 통과하지 않고 바로 리턴을 해주면 된다.