본문 바로가기

프로그래밍/C

[library] strdup 구현하기

📌 매뉴얼 (Linux)

더보기

NAME
       strdup - duplicate a string
: 문자열 복제하기


SYNOPSIS
       #include <string.h>
       char *strdup(const char *s);

DESCRIPTION
       The  strdup() function returns a pointer to a new string which is a du‐
       plicate of the string s.  Memory for the new string  is  obtained  with
       malloc(3), and can be freed with free(3).
: strdup 함수는 문자열의 복제인 새 문자열에 포인터를 반환한다. 새 문자열에 대한 메모리는

malloc을 사용하고, free로 해제할 수 있다.


RETURN VALUE
       On  success,  the strdup() function returns a pointer to the duplicated
       string.  It returns NULL if insufficient memory was available, with er‐
       rno set to indicate the cause of the error.
: 성공 시, strdup 함수는 복제된 문자열에 대한 포인터를 반환하고, 메모리가 충분하지 않으면 NULL을

반환하며 오류의 원인을 나타내는 에러 숫자를 설정한다.

 

📌 작성 코드

char	*do_strdup(const char *s)
{
	char	*dup;
	size_t	s_len;
	size_t	i;

	s_len = do_strlen(s);
	i = 0;
	dup = (char *)malloc(sizeof(char) * (s_len + 1));
	if (dup == NULL)
		return (NULL);
	while (s[i] != '\0')
	{
		dup[i] = s[i];
		i ++;
	}
	dup[i] = '\0';
	return (dup);
}

 

📌 코드 리뷰

strdup 함수는 인자로 받은 s 문자열을 복사해 새로운 문자열에 넣어주고 return해주는 동작을 한다.

우선 받아온 s 문자열의 길이를 구하여 해당 길이만큼 malloc으로 동적할당을 해준다. (문자열 마지막에 null 넣어주는

것을 고려해서 s_len + 1 만큼 할당해주어야하며, 자료형 길이인 sizeof(char) 도 일반적으로 적어줘야하나 1이므로 생략)

 

그 이후, 할당이 안되어 dup이 NULL인 경우에 예외 처리로 NULL을 반환하도록 했고,

반복문을 NULL을 만날 때까지로 설정하여 s 문자열을 할당해둔 dup에 하나씩 넣어주도록 반복했다.

그 후 문자열 마지막 부분에 NULL(\0)을 넣어주면서 마무리해주고, 해당 dup을 반환하면서 동작을 종료한다.

 

이 함수가 활용성이 정말 크다는 점을 이후 과제에서 많이 느끼고 있다. const로 만들어져 수정할 수 없는 문자열 등을

새 배열에 복사해서 자주 사용하게 되는 부분이 많았고, strdup이 여기서 자주 잘 쓰이는 것 같다.

'프로그래밍 > C' 카테고리의 다른 글

[library] tolower 구현하기  (0) 2024.05.13
[library] toupper 구현하기  (0) 2024.05.13
[library] strnstr 구현하기  (0) 2024.05.10
[library] strncmp 구현하기  (0) 2024.05.10
[library] strrchr 구현하기  (0) 2024.04.16
Recent Posts
Popular Posts
Recent Comments