열렬히.뛰기

ft_substr

école 42 > libft > ft_substr

문제

  • 프로토타입 : char *ft_substr(char const *s, unsigned int start, size_t len);
  • 문자열 sstart번째부터 len만큼 자르기
  • 할당이 잘 안되면 NULL 반환

고려사항

  1. 만약 s가 없다면? 또는 만약 start가 s의 길이보다 크다면? if (start ≥ s_len)
  2. 만약 len이 0이라면? 만약 len이 s의 길이보다 크다면? if (len > s_len)
  3. 만약 start + len 이 s의 길이보다 크다면? if (start + len > s_len)

해결책

  • 1번 해결책 ⇒ ‘\0’ 한개가 있는 배열 반환 (tooshort())
  • 2번, 3번 해결책 ⇒ 할당 시에 길이를 만들어주는 함수를 제작 (makelen())

코드

c
#include "libft.h"

char	*tooshort(void)
{
	char	*arr;

	arr = (char *)malloc(sizeof(char));
	if (!arr)
		return (NULL);
	arr[0] = '\0';
	return (arr);
}

int	makelen(char const *s, unsigned int start, size_t len)
{
	size_t	s_len;

	s_len = ft_strlen(s);
	if (start + len > s_len)
		return (s_len - start);
	else
		return (len);
}

char	*ft_substr(char const *s, unsigned int start, size_t len)
{
	size_t	i;
	size_t	j;
	char	*newstr;

	i = 0;
	j = 0;
	if (ft_strlen(s) < start)
		return (tooshort());
	newstr = (char *)malloc((makelen(s, start, len) + 1) * sizeof(char));
	if (!newstr)
		return (NULL);
	while (s[i])
	{
		if (i >= start && j < len)
			newstr[j++] = s[i];
		i++;
	}
	newstr[j] = '\0';
	return (newstr);
}