열렬히.뛰기

get_next_line_utils.c

école 42 > get_next_line > get_next_line_utils.c

일부 주의사항

  • ft_strjoin의 경우 다음 예외처리가 필요하다.
  • 이는 s1이 빈 첫 번째 케이스를 염두해 둔 것.
c
	if (!s1 && !s2)
		return (NULL);
	else if (!s1)
		return (ft_strdup((char *)s2));
	else if (!s2)
		return (ft_strdup((char *)s1));

코드

c
#include "get_next_line.h"

static size_t	ft_strlen(const char *str)
{
	size_t	count;

	if (str == 0)
		return (0);
	count = 0;
	while (*str != '\0')
	{
		count++;
		str++;
	}
	return (count);
}

char	*ft_strchr(const char *s, int c)
{
	size_t	i;
	size_t	len;

	len = ft_strlen(s);
	i = 0;
	while (i < len + 1)
	{
		if (*(s + i) == (char) c)
			return ((char *)(s + i));
		i++;
	}
	return (NULL);
}

char	*ft_strdup(char *src)
{
	char	*arr;
	int		size;
	int		i;

	i = 0;
	size = ft_strlen(src);
	arr = (char *)malloc(sizeof(char) * (size + 1));
	if (!arr)
		return (NULL);
	i = 0;
	while (src[i] != '\0')
	{
		arr[i] = src[i];
		i++;
	}
	arr[i] = '\0';
	return (arr);
}

char	*ft_strjoin(char const *s1, char const *s2)
{
	char	*joined;
	int		size;
	int		i;

	i = 0;
	if (!s1 && !s2)
		return (NULL);
	else if (!s1)
		return (ft_strdup((char *)s2));
	else if (!s2)
		return (ft_strdup((char *)s1));
	size = ft_strlen(s1) + ft_strlen(s2) + 1;
	joined = (char *)malloc(size * sizeof(char));
	if (!joined)
		return (0);
	while (i < size && *s1 != '\0')
		joined[i++] = *(s1++);
	while (i < size && *s2 != '\0')
		joined[i++] = *(s2++);
	joined[i] = '\0';
	return (joined);
}