➰ 코딩 부트캠프/42 seoul

[0 Circle] Libft - ft_strlcpy, ft_strlcat

 사과개발자 2020. 12. 23. 21:08

📌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); 
 }
반응형