ft_strdup 구현

yeonjkim·2021년 5월 24일
0

42seoul-libft

목록 보기
25/43

1. ft_strdup 용도

* 문자열 s1를 복사하고 복사된 문자열을 가리키는 포인터를 반환하는 함수

* allowd function : malloc

2. ft_strdup 프로토타입

char	*ft_strdup(const char *s1)
const char *s1 : 복사할 문자열 s1

3. 구현 시 유의사항

  • 함수 내부에서 지역 변수로 문자열을 만들고 복사하면 이 문자열 복사본은 스택 영역에 저장되어 있기 때문에 함수 종료 시 사라지게 된다.
    따라서 함수 종료 후에도 이용하기 위해 힙 영역에 공간을 할당하고 그 공간에 저장을 해야 하는데, 이 때 이용하는 함수가 malloc()이다.

  • 할당 실패 시 NULL을 반환한다.

  • 복사본의 마지막 원소는 '\0'이다.

4. 코드 구현

#include "libft.h"

char                    *ft_strdup(const char *s1)
{
        char            *p;
        size_t          slen;
        size_t          index;

        index = 0;
        slen = ft_strlen(s1);
        if (!(p = (char*)malloc(sizeof(char) * (slen + 1))))
        {
                return (0);
        }
        while (index < slen)
        {
                p[index] = s1[index];
                index++;
        }
        p[index] = '\0';
        return (p);
}

5. 코드 구현 방법

(1) slen을 통해 s1의 길이 구하기.
(2) p에 slen + 1(맨 뒤에 '\0' 붙이기 위함)만큼 메모리를 할당하기
(3) 메모리 할당 실패 시 NULL(0)반환
(4) index < slen보다 작을 때까지 p에 s의 요소들을 복사하기
(4) 마지막에 '\0'넣은 후 리턴

0개의 댓글