42Seoul/libft

libft - strdup, strlen, substr

재윤 2023. 3. 24. 13:34
반응형

strdup

strdup는 스트링을 복제해서 할당된 메모리에 넣고 리턴을 해주는 친구임

malloc을 사용해야함.

함수 원형

char	*ft_strdup(const char *string)

구현

#include "libft.h"

char	*ft_strdup(const char *string)
{
	char	*temp;
	int		i;
	int		count;

	i = 0;
	count = strlen(string);
	temp = (char *)malloc(count * sizeof(char) + 1);
	while (string[i])
	{
		temp[i] = string[i];
		i++;
	}
	temp[i] = '\\0';
	return (temp);
}

참고 사이트

strdup() — 스트링 복제

 

strdup() — 스트링 복제

형식 #include char *strdup(const char *string); 참고: strdup 함수는 C++ 프로그램에서 사용 가능합니다. 프로그램이 __cplusplus__strings__ 매크로를 정의할 때만 C에서 사용 가능합니다. 언어 레벨 XPG4, 확장 설명

www.ibm.com

 

strlen

s의 주소값을 받은 친구의 길이를 세어주는 라이브러리

int	ft_strlen(const char *s)
{
	int	i;

	i = 0;
	while (s[i] != '\\0')
	{
		i++;
	}
	return (i);
}

 

참고 사이트

[C언어/C++] strlen 함수(문자열 길이)에 대해서

 

[C언어/C++] strlen 함수(문자열 길이)에 대해서

안녕하세요. BlockDMask 입니다.오늘은 char*, char [] 타입의 문자열 길이에 대해서 이야기 해보려 합니다.즉. C언어 스타일 문자열의 길이를 구하는 함수에 대해서 알아보려합니다. > C언어 문자열 관

blockdmask.tistory.com

 

substr

함수 원형

char	*ft_substr(char const *s, unsigned int start, size_t len)

이 함수는 s 문자열을 받아서 시작점인 start를 알려준다. 거기서 부터 len만큼 복사를 하게 된다.

  1. s 문자열
  2. s 문자열 복사 시작점 start
  3. len만큼 복사

예외 처리

  1. 문자열인 s 길이 보다 start가 더 길어버리면 NULL을 반환하는 것이 아니라 빈 문자열을 반환해야함
    1. 왜냐? abcd가 있고 start가 7이면 NULL값을 가리키는 것이 아니라 아무것도 가르키고 있지 않아서 빈 문자열
  2. 할당 부분에서 len이 문자열 s보다 길어지게 되면 남는 할당 공간이 생겨버린다.
    1. 그 부분을 제외하고자 (s문자열) - (start)을 하여 len을 다시 초기화한다.
#include "libft.h"

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

	cou = ft_strlen(s);
	if (cou <= start)
		return (ft_strdup(""));
	if (len >= cou - start)
		len = cou - start;
	temp = (char *)malloc(sizeof(char) * (len + 1));
	if (!temp)
		return (0);
	i = 0;
	while (s[start] != '\\0' && i < len)
	{
		temp[i] = s[start];
		start++;
		i++;
	}
	temp[i] = '\\0';
	return (temp);
}

 

참고 사이트

[C] 나만의 라이브러리 - substr, strjoin, strtrim, itoa

 

[C] 나만의 라이브러리 - substr, strjoin, strtrim, itoa

1. substr 함수 형태 char *my_substr(char const *s, unsigned int start, size_t len); 매개 변수 원본 문자열 문자열 s에 있는 하위 문자열의 시작점 하위 문자열의 길이 반환 값 잘라낸 문자열, 실패시 NULL 반환 설

wonillism.tistory.com

 

반응형

'42Seoul > libft' 카테고리의 다른 글

libft - strtrim, striteri, split  (0) 2023.03.24
libft - strjoin, itoa, strmapi  (0) 2023.03.24
libft - strnstr, atoi, calloc  (0) 2023.03.24
libft - strrchr, memchr, memcmp  (2) 2023.03.24
libft - toupper, tolower, strchr  (0) 2023.03.24