문제
- 프로토타입 :
char *ft_substr(char const *s, unsigned int start, size_t len); - 문자열
s를start번째부터len만큼 자르기 - 할당이 잘 안되면
NULL반환
고려사항
- 만약 s가 없다면? 또는 만약 start가 s의 길이보다 크다면?
if (start ≥ s_len) - 만약 len이 0이라면? 만약 len이 s의 길이보다 크다면?
if (len > s_len) - 만약 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);
}