ft_strlcpy 구현

yeonjkim·2021년 5월 26일
0

42seoul-libft

목록 보기
42/43

1. ft_strlcpy 용도

* src를 dstsize만큼 dest에 복사하고 src의 크기를 반환하는 함수.

2. ft_strlcpy 프로토타입

size_t		ft_strlcpy(char *dst, const char *src, size_t dstsize)
char *dst : 복사된 문자열을 넣을 주소
const char *src : 복사할 문자열
size_t dstsize : 복사할 메모리의 크기

3. 구현 시 유의사항

  • dst에 src를 size - 1만큼 복사한 뒤 마지막에 '\0'을 넣는다.

  • dst가 NULL이면 복사할 공간이 없는 것이므로 0리턴.

  • src가 NULL이면 src의 길이인 0리턴.

  • index < dstsize - 1이 아닌 index + 1 < dstsize로 한 이유는 dstsize의 type이 size_t이므로 음수가 불가능하다.
    --> 만일 dstsize가 0이라면 -1이 되므로 불가능한 type이다.

4. 코드 구현

#include "libft.h"

size_t                  ft_strlcpy(char *dst, const char *src, size_t dstsize)
{
        size_t  index;
        size_t  size;

        index = 0;
        size = ft_strlen(src);
        if (!dst || !src)//src가 NULL이면 src길이 0리턴, dst가 NULL이면 복사할 공간이 없는 것이니 0리턴
                return (0);
        if (dstsize == 0)
                return (size);
        while (src[index] != '\0' && index + 1 < dstsize)//맨 뒤에 '\0'넣어야 하니 index + 1.
        {
                dst[index] = src[index];
                index++;
        }
        dst[index] = '\0';
        return (size);
}

5. 코드 구현 방법

(1) dst나 src가 NULL이면 0을 리턴한다.
(2) dstsize가 0이면 src의 길이를 리턴한다.
(3) src[index] != '\0'이고, index + 1 < dstsize일 동안 dst에 src를 복사한다.
(4) dst의 마지막에 '\0'을 넣고 src의 길이를 반환한다.

0개의 댓글