1. ft_substr란?
문자열 s를 start부터 len만큼 잘라서 가져오는 함수이다.
2. 함수 프로토타입
char *ft_substr(char const *s, unsigned int start, size_t len)
3. 함수구현
#include "libft.h"
char *ft_substr(char const *s, unsigned int start, size_t len)
{
char *str;
size_t s_len;
size_t sub_len;
if (!s)
return (NULL);
s_len = ft_strlen(s);
if (start >= s_len)
return (ft_strdup(""));
sub_len = s_len - start;
if (sub_len > len)
sub_len = len;
str = (char *)malloc(sizeof(char) * (sub_len + 1));
if (!str)
return (NULL);
ft_strlcpy(str, s + start, sub_len + 1);
return (str);
}
1. 문자열이 없을경우
2. 시작점이 문자열 길이보다 클 경우
- 빈 문자열을 리턴해준다.
- return("")이 아니라 return(ft_strdup(""))를 리턴하는 이유를 설명하자면 ""는 리터럴 상수로 프로그램의 메모리 공간의 고정된 주소를 가리킨다. 하지만 이 함수는 동적으로 메모리 공간을 할당하여 부분 문자열을 반환하는 함수이기 때문에 새로 할당된 메모리를 반환해야한다. 이 때문에 strdup("")로 빈 문자열을 동적으로 할당하여 반환하는 것이다.
사용예시
int main(void)
{
char *s = "Hello, World!";
char *sub;
sub = ft_substr(s, 7, 5);
printf("%s\n", sub);
free(sub);
sub = ft_substr(s, 20, 5);
printf("%s\n", sub);
return (0);
}