Unborn 8.0 Yellow Pointer
본문 바로가기
42 SEOUL/0_Libft

[Libft] Part1 : calloc, strdup

by 에삐니 2022. 4. 11.
728x90

[이전 글]

 

[Libft] 나만의 첫 번째 라이브러리

1. 프로젝트 소개 C 프로그래밍을 할 때 매우 유용한 표준 함수들을 사용할 수 없다면 굉장히 지루할 거예요. 이 프로젝트를 통해 이러한 표준 함수들을 구현하고, 이해하고, 어떻게 사용하는지

bini-079.tistory.com

[다음 글]

 

[Libft] Part2 : Additional functions

삐니의 소소한 일상 [Libft] Part2 : Additional functions 본문 42 SEOUL/Libft [Libft] Part2 : Additional functions 에삐니 2022. 3. 24. 01:22 Prev 1 ··· 3 4 5 6 7 8 9 10 11 ··· 106 Next

bini-079.tistory.com


Part1 : Libc functions

아래의 함수들을 다시 구현하세요. 이 함수들은 외부 함수를 필요로 하지 않습니다 :

  • isalpha, isdigit, isalnum, isascii, isprint
  • bzero, memset, memcpy, memmove, memchr, memcmp
  • strlen, strnstr, strlcpy, strlcat, strchr, strrchr, strncmp
  • toupper, tolower, atoi

다음의 함수들은 외부 함수 malloc을 사용하여 구현하세요 :

  • calloc, strdup

ft_calloc

void	*ft_calloc(size_t count, size_t size)
{
	void	*ptr;
	size_t	len;

	len = count * size;
	ptr = malloc(len);
	if (!ptr)
		return (0);
	ft_memset(ptr, 0, len);
	return (ptr);
}
  • size * count 크기의 메모리 공간을 확보 후 0으로 초기화하는 함수이다.
  • malloc과 달리 calloc은 할당된 공간의 값을 모두 0으로 초기화한다는 차이가 있다.
  • 배열을 할당하고 모두 0으로 초기화할 필요가 있는경우 calloc을 쓰면 편하다.

2022/04/11 테스트 케이스 추가로 소스를 수정했다.

void	*ft_calloc(size_t count, size_t size)
{
	void	*ptr;
	size_t	len;

	len = count * size;
     	if (count > 0 && size > 0 && size != (len / count))
    		return (0);
	ptr = malloc(len);
	if (!ptr)
		return (0);
	ft_memset(ptr, 0, len);
	return (ptr);
}

 

ft_strdup

char	*ft_strdup(const char *s1)
{
	size_t	i;
	size_t	len;
	char	*str;

	len = ft_strlen(s1);
	str = (char *)malloc(sizeof(char) * (len + 1));
	if (!str)
		return (NULL);
	i = 0;
	while (s1[i])
	{
		str[i] = s1[i];
		i++;
	}
	str[i] = 0;
	return (str);
}
  • 문자 s1을 복사하고 복사된 문자열을 가리키는 포인터를 반환하는 함수이다.
728x90
반응형

댓글