📌 매뉴얼 (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 |