반응형
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);
}
참고 사이트
strlen
s의 주소값을 받은 친구의 길이를 세어주는 라이브러리
int ft_strlen(const char *s)
{
int i;
i = 0;
while (s[i] != '\\0')
{
i++;
}
return (i);
}
참고 사이트
[C언어/C++] strlen 함수(문자열 길이)에 대해서
substr
함수 원형
char *ft_substr(char const *s, unsigned int start, size_t len)
이 함수는 s 문자열을 받아서 시작점인 start를 알려준다. 거기서 부터 len만큼 복사를 하게 된다.
- s 문자열
- s 문자열 복사 시작점 start
- len만큼 복사
예외 처리
- 문자열인 s 길이 보다 start가 더 길어버리면 NULL을 반환하는 것이 아니라 빈 문자열을 반환해야함
- 왜냐? abcd가 있고 start가 7이면 NULL값을 가리키는 것이 아니라 아무것도 가르키고 있지 않아서 빈 문자열
- 할당 부분에서 len이 문자열 s보다 길어지게 되면 남는 할당 공간이 생겨버린다.
- 그 부분을 제외하고자 (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
반응형
'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 |