티스토리 뷰
[개요]
strdup 함수란?
strdup 함수 구현 코드
strdup 구현 설명
strdup함수는 동적할당 된 메모리 공간에 문자열을 복사할 때 사용된다. 직접 구현해서 내부 원리를 알아보자.
strdup 함수란?
#include <string.h>
char *strdup(const char *s1)
strdup 함수는 문자열 s1을 복사하기 위해서 충분한 메모리를 할당한다. s1 문자열을 동적할당 메모리에 복사한 후에 메모리 주소(pointer)를 반환한다. 이후에 이 메모리 주소는 free 함수를 통해 동적할당 해제되어야 한다.
만약 할당할 메모리 공간이 충분하지 않다면(동적할당 실패 시), NULL 값이 반환되고 errno에 ENOMEN이 세팅된다.
strdup 함수 구현 코드
char *mgo_strdup(const char *s1)
{
char *duped;
size_t i;
i = 0;
if (!s1)
return (NULL);
duped = (char *)malloc(mgo_strlen(s1) + 1);
if (!duped)
return (NULL);
while (s1[i])
{
duped[i] = s1[i];
i++;
}
duped[i] = '\0';
return (duped);
}
strdup 구현 설명
문자열 s1의 길이에 1을 더한 만큼 메모리 공간을 할당한다. while문을 통해 s1 문자열에 '\0'문자가 나오기 전까지 할당된 메모리에 차례대로 복사한다. while문을 빠져나오면 메모리 마지막에 '\0'문자를 넣어주고 할당된 메모리 주소를 반환한다.
SIGSEGV 방지를 위해서, s1이 NULL pointer일 경우에 NULL을 반환하여 null guard를 해주었다. 문자열의 길이는 구현한 strlen 함수를 사용했다. 동적할당 실패시에 NULL을 반환하도록 구현했다.
※
man strdup
'C' 카테고리의 다른 글
서버가 클라이언트의 접속 요청을 받을 수 있도록 소켓 설정하기(with C/C++) (0) | 2022.08.27 |
---|---|
[c] strjoin 함수 구현하기 (0) | 2022.01.14 |
[42cursus] miniLibX(mlx) library (0) | 2021.12.27 |
strnstr()에서 NO CRASH(no segfault) 처리 (0) | 2021.05.14 |
memcpy()와 memmove()에서 null 처리 (0) | 2021.05.13 |