Libft란
libft과제는 자신만의 라이브러리(libft.a)를 만드는 프로젝트이다 향후 42seoul과제를 진행해나가면서 <stdio.h> <stdlib.h> 같이 외부 헤더 안에 포함된 함수들을 사용하여 프로그램을 작성하는 것이 아닌 이번 과제를 진행하면서 자주 사용할만한 함수들 ex.) ft_strlen, ft_atoi, ft_calloc 등 을 미리 만들어서 라이브러리 형태로 사용하는 것이 이번 과제의 목표이다 향후 과제에서 만들게되어지는 ft_printf , get_next_line 등 자신이 추가로 libft에 추가하고 싶은 함수들도 과제를 통과후 libft에 포함시켜 확장해 나갈수 있다.
과제를 들어가기전 알고가면 좋은 지식
- size_t : size_t는 해당 시스템에서 어떤 객체나 값이 포함할 수 있는 최대 크기의 데이터를 표현하는 타입으로 반드시 unsigned 형으로 나타낸다 (stddef.h 및 cstddef 헤더에 정의되어 있다.)
libft 과제를 진행해 가면서 함수들을 구현하기 위해 manual을 확인해 본다면 size_t에 대한 자료형을 종종 만나볼수 있다 우리가 평소 보던 int, long long형 같은 자료형이 아니여서 모르는사람들이 많을거 같은데 size_t는 항상 최대 크기의 데이터를 보관할수있게 보장해준다고 한다 보통 일반적으로 int형은 4byte의 데이터크기를 가진다고 알고 있지만 프로그램을 실행하는 컴퓨터의 환경에 따라서 1byte의 데이터크기만 가질수도 있다 이처럼 사용자가 사용하는 컴퓨터환경과 상관없이 항상 최대의 크기로 지정하고 싶을 경우 사용할 수 있는 자료형이 size_t형이다 c99원문에 따르면 size_t자료형의 크기는 x86에서는 32비트 , x64에서는 64비트로 항상 최대의 크기를 보장해준다고 한다 size_t는 부호가 없는 unsigned형이지만 부호가 필요할경우 사용할수 있는 ssize_t 자료형도 존재한다.
출처 : https://namu.wiki/w/size_t
- mem 함수와 str 함수의 차이점
과제를 진행해나가면 memcpy, strcpy와 같은 똑같은 기능을 하는데 mem으로 시작하는 함수와 str으로 시작하는 함수에대해서 구현을 하게 될것이다 동작은 똑같이 동작하지만 얼마나 동작을 하는지에 따라서 차이가 발생하는데 str함수는 string 말 그대로 문자열에 사용하기 위한 함수로 보통 종료지점이 '\0' 널 문자를 기준으로 동작이 종료 되어진다 그에비해 mem함수는 동작하고싶은 크기를 인자로 따로 넘겨받아서 해당 크기만큼 동작하기 때문에 구조체같은 자료형도 문제없이 복사가 된다는 특징을 가지고있다.
- fd(file_descriptor)
함수를 구현해나가면서 ft_putstr_fd, ft_putchar_fd와 같이 화면에 원하는 문자를 출력해주는 함수의 경우 fd를 인자로 받아서 해당 fd에 write를 해주게 된다 이때 fd가 의미하는 것은 출력을 어디다 해야되는지를 의미한다 리눅스는 모든것이 파일로 동작되는데 이때 해당 파일과 프로그램을 연결해주는게 fd(file_descriptor)이다 기본적으로 할당되는 fd는 0번(standard_input) 1번(standard_output) 2번(standard_error)이 존재한다