[getnextline](2)Util함수 구현
in 42Seoul on Get_next_line
이번 포스트는 get_next_line프로그램에 필요한 함수들에 대한 내용입니다.
1️⃣ 유틸함수
- get_next_line함수는 기본적으로
<unistd.h>
헤더파일에 선언된 저수준입출력함수를 이용하여 구현할 예정입니다.
저수준입출력함수에 관한 내용은 (1) open,close함수, (2) read,write,lseek함수을 참고하시면 됩니다. - 그외에 필요한 함수들은 따로
get_next_line_utils.c
파일에 구현하여 사용할 예정입니다.
< 추가적으로 필요한 함수 >
- 문자열의 길이를 새어주는 함수(strlen)
- 메모리를 복사해주는 함수(memcpy)
- 기존문자열에 새로운문자열을 붙여 새로 할당한 메모리에 복사하는 함수(strjoin)
- 문자열을 원하는 길이만큼 새로 할당한 메모리에 복사하는 함수(strndup)
2️⃣ 함수 구현
1. < ft_strlen >
strlen함수포스트를 참고하시면 됩니다.
size_t ft_strlen(const char *str)
{
size_t len;
len = 0;
while (*str != '\0')
{
str++;
len++;
}
return (len);
}
2. < ft_memcpy >
memcpy함수포스트를 참고하시면 됩니다.
void *ft_memcpy(void *dst, const void *src, size_t size)
{
unsigned char *dp;
const unsigned char *sp;
dp = dst;
sp = src;
if (dp == NULL && sp == NULL)
return (0);
while (size-- > 0)
*dp++ = *sp++;
return (dst);
}
3. < ft_strjoin >
char *ft_strjoin(char const *s1, char const *s2)
{
size_t len1;
size_t len2;
char *result;
len1 = ft_strlen(s1);
len2 = ft_strlen(s2);
if (!(result = (char *)malloc(sizeof(char) * (len1 + len2 + 1))))
return (0);
ft_memcpy(result, s1, len1);
ft_memcpy(result + len1, s2, len2);
result[len1 + len2] = '\0';
return (result);
}
4. < ft_strndup >
char *ft_strndup(const char *str, ssize_t offst)
{
char *result;
ssize_t cnt;
cnt = 0;
if (!(result = (char *)malloc(sizeof(char) * (offst + 1))))
return (0);
while (*str != '\0' && cnt < offst)
{
*result++ = *str++;
cnt++;
}
*result = '\0';
return (result - cnt);
}