* 문자열 s1를 복사하고 복사된 문자열을 가리키는 포인터를 반환하는 함수
* allowd function : malloc
char *ft_strdup(const char *s1)
const char *s1 : 복사할 문자열 s1
함수 내부에서 지역 변수로 문자열을 만들고 복사하면 이 문자열 복사본은 스택 영역에 저장되어 있기 때문에 함수 종료 시 사라지게 된다.
따라서 함수 종료 후에도 이용하기 위해 힙 영역에 공간을 할당하고 그 공간에 저장을 해야 하는데, 이 때 이용하는 함수가 malloc()이다.
할당 실패 시 NULL을 반환한다.
복사본의 마지막 원소는 '\0'이다.
#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);
}
(1) slen을 통해 s1의 길이 구하기.
(2) p에 slen + 1(맨 뒤에 '\0' 붙이기 위함)만큼 메모리를 할당하기
(3) 메모리 할당 실패 시 NULL(0)반환
(4) index < slen보다 작을 때까지 p에 s의 요소들을 복사하기
(4) 마지막에 '\0'넣은 후 리턴