ft_strdup

ft_strdup

“ft_strdup에 대하여”

<목차>

1. MY CODES

strdup – save a copy of a string

(1) MY CODES

#include "libft.h"

char	*ft_strdup(const char *s1)
{
	size_t	s1_len;
	char	*mem;

	s1_len = ft_strlen(s1); // strlen
	mem = (char *) malloc (sizeof(char) * (s1_len + 1));
	if (mem != NULL)
	{
		ft_memcpy(mem, s1, s1_len);
		mem[s1_len] = '\0';
	}
	return (mem);
}
  • 매개변수로 받은 const 문자열 s1의 복사본을 만들어 반환한다.

(2) MAN STRDUP

SYNOPSIS
	#include <string.h>

	char *strdup(const char *s1);

	char *strndup(const char *s1, size_t n);

DESCRIPTION
	The strdup() function allocates sufficient memory for a copy of the
	string s1, does the copy, and returns a pointer to it. The pointer may
	subsequently be used as an argument to the function free(3).

	If insufficient memory is available, NULL is returned and errno is set to
	ENOMEM.

	The strndup() function copies at most n characters from the string s1
	always NUL terminating the copied string.
  • strdup 함수는 매개변수로 들어온 s1을 복사할 수 있을 만큼의 충분한 메모리를 할당한 후, s1을 메모리에 복사하고 그 포인터를 반환한다. 반환된 포인터는 free(3)의 매개 변수로 사용될 수 있다. 메모리가 충분하지 않다면 NULL이 반환되고 errno는 ENONEM으로 설정된다.
  • strndup은 s1으로부터 n개 캐릭터만큼을 복사하여 반환하는데, 복사된 문자열은 항상 NULL로 끝난다(NUL Terminating).
  • libft 뿐만 아니라, 다른 여러 과제들에서도 요긴하게 사용되는 함수이다.

[!NOTE]
strdup의 경우 libft 뿐만 아니라 앞으로의 C 과제에서도 거의 무조건 사용되는 함수이기 때문에 잘 알아두면 좋다. 문자열을 다룰 때 원본 포인터를 건드리거나 얕은 복사를 하는 경우 메모리를 관리하기 힘든 경우가 많이 있는데, 이때 strdup을 사용하여 메모리를 깊은 복사하고 다 쓰고 나면 해제하면서 관리하면 편리하게 과제를 진행할 수 있다.