ft_substr

jaehlee·2025년 4월 27일

Libft

목록 보기
10/26

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. 문자열이 없을경우

  • NULL리턴해준다

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); // "World" 출력
	free(sub);

	sub = ft_substr(s, 20, 5);
	printf("%s\n", sub); // "" 출력 (start > strlen)

	return (0);
}
profile
공부하는 개발자

0개의 댓글