📌ft_strlcpy
src에서 dst로 값을 size길이 만큼 복사
size_t ft_strlcpy(char *dst, const char *src, size_t dstsize));
➕ 매개변수 (Parameters)
dst
: 채우고자 하는 메모리의 시작 주소src
: 복사하려는 메모리의 시작 주소dstsize
: 채우고자 하는 바이트의 수
➕ 반환값 (Return)
size_t
: src의 총 길이
➕ 설명 (Description)
- ⚡ 문자열의 끝인 dest[size-1]는 NULL 값으로 채워주기
- size가 0일 때 바로 함수 끝내기
- dst의 주소가 NULL일 때 NULL반환
➕ 코드 (Code)
#include "libft.h"
size_t ft_strlcpy(char *dst, const char *src, size_t dstsize)
{
unsigned int i;
i = 0;
if (!dstsize)
return (ft_strlen(src));
if (!dst)
return (0);
while (i < (dstsize - 1) && src[i])
{
dst[i] = src[i];
i++;
}
dst[i] = '\0';
return (ft_strlen(src));
}
📌ft_strlcat
src에서 dst로 값 붙이기
size_t ft_strlcat(char *dst, const char *src, size_t size) ;
➕ 매개변수 (Parameters)
dst
: 채우고자 하는 메모리의 시작 주소src
: 붙이려는 메모리의 시작 주소dstsize
: 채우고자 하는 바이트의 수
➕ 반환값 (Return)
size_t
: min(dst의 초기글자수, size) + src의 글자수
➕ 설명 (Description)
➕ 예시 (Example)
char src[] = "saysomthing";
char dst[10] = "goods";
printf("return (5+11) : %d, dst(goodssay) : %s\n", strlcat(dst,src,9), dst);
//결과 : return (5+11) : 16, dst(goodssays) : goodssays
➕ 코드 (Code)
#include "libft.h"
size_t ft_strlcat(char *dst, const char *src, size_t size)
{
size_t dst_len;
size_t src_len;
size_t remain_len;
size_t i;
i = 0;
dst_len = ft_strlen(dst);
src_len = ft_strlen(src);
remain_len = size - dst_len;
if (!size)
return (src_len);
if (dst_len >= size)
return (src_len + size);
while (i < (remain_len - 1) && src[i])
{
dst[dst_len + i] = src[i];
i++;
}
dst[dst_len + i] = '\0';
return (dst_len + src_len);
}
반응형
'➰ 코딩 부트캠프 > 42 seoul' 카테고리의 다른 글
[0 Circle] Libft - ft_strchr, ft_strrchr (0) | 2020.12.24 |
---|---|
[0 Circle] Libft - ft_strchr, ft_strrchr (0) | 2020.12.23 |
[0 Circle] Libft - ft_memcmp, ft_strlen (0) | 2020.12.23 |
[0 Circle] Libft - ft_memmove, ft_memchr (0) | 2020.12.22 |
[0 Circle] Libft - ft_memcpy, ft_memccpy (3) | 2020.12.22 |