Libft 첫 과제

Kihoon Lee·2020년 10월 5일
1

42cursus

목록 보기
1/1

42의 본과정을 시작하고 만난 첫번 째 과제이다!

과제 소개

내가 이해한 과제 소개 내용은

C프로그래밍은 표준 함수들을 사용하지 않고는 더럽게 힘들거다!
그렇다고 쓰게 해준다는 건 아니고~~ 지금부터 너가 라이브러리를 만들어보아! 그리고 앞으로 두고두고 진화시켜서 써보려무나!

이다.

과제 목표

part1(함수 24개) / part2(함수 10개) / bonus part (함수 9개)
1. 세 개 파트로 구성된 모든 함수들의 "ft_함수이름.c" 파일을 만들어라!
2.이 녀석들의 프로토타입 등인 담긴 헤더파일 (libft.h)을 만들어라!
3.이녀석들을 정적라이브러리 파일(libft.a)로 만드는 Makefile을 만들어라!

과제 TIP

테스터 부터 준비하자

과제에 먼저 헤딩하면서 느낀점은 잘 만들어진 테스트 프로그램의 필요성이었다! 그래서 갓갓갓들이 올려준 링크를 통해 테스트 프로그램 깃의 주소를 알아 냈다.
링크에 들어가서 CTL-F 로 libft 를 치면 몇가지 테스트 프로그램이 있는데 두 개 정도의 테스트 프로그램을 돌려보는걸 추천한다. (한 개로만 해서 다 통과하고 제출했다가 뮬리4한테에 호되게 혼났다!)
42_테스트 프로그램들

Makefile / Headerfile 만들기

테스트 프로그램을 성공적으로 준비했지만, 실행시켜보니 과제에서 요구한 Makefile과 header파일이 준비되어있지 않으면 동작하지 않았다.
그래서 일단 Makefile 과 헤더파일을 만들어줬다.
Makefile 작성법에 대한 기억이 추석 송편과 함께 달나라로 가버려서 고생했다. 혹시 나 같은 42프랜드들을 위해 Makefile 예시를 공유한다!

.SUFFIXEX : .c .o
NAME = libft.a
CC = gcc
AFLAGS = rc
CFLAGS = -Wall -Wextra -Werror
SRCS = *.c
OBJECTS = $(SRCS:.c=.o)

all : $(NAME)

clean :
	rm -rf $(OBJECTS)
fclean : clean
	rm -rf $(NAME)
re : fclean all

$(NAME) : $(OBJECTS)
	ar $(AFLAGS) $@ $?
%.o : %.c
	$(CC) $(CFLAGS) -c $?
.PHONY : all clean fclean re

디버깅 TIPS

테스트 프로그램을 이용해서 함수를 하나씩 만들어 나가다 보니, 해결이 잘 안 되는 에러가 뜰 때 테스트 프로그램에서 어떠한 INPUT 값을 넣었는지 확인하고 싶을 때가 있었다.
내가 사용한 테스트 프로그램은
1.libft-unit-test
2.Libftest
이렇게 두가지였다.

테스트 프로그램별 디버깅 TIP

libft-test-unit : 함수 내에 인자를 출력하는 printf를 넣는다!

size_t	ft_strlen(const char *s)
{
	printf("인자는 : %s\n", s); //요런 식으로!
	size_t		i;

	i = 0;
	while (s[i])
		++i;
	return (i);
}

Libftest : grademe.sh 실행 후 생성되는 deepthought을 열어서 log를 잘 본다!

cd ..

처음 써보는 velog인데 markdown 사용법에 익숙해지면 좀더 수월하게 쓸 수 있을거 같다. 깃허브도 마크 다운 문서를 지원하던데 "README.md" 를 멋있게 작성하고 싶어서 마크 다운 문서 작성 연습도 할 겸 velog로 공부한걸 정리해보면 좋겠다 싶어서 냅다 만들어봤다!

음.. 끝!!!


이후.. 한번 더 뮬리넷에 혼꾸녕 나고 배운점

split 이 계속 abort 에러가 떴는데 하루 종일 못잡다가 결국 잡았다..
원인은

char **split;
if(!(split = (char **)malloc(sizeof(char *) * words + 1)))
	return (NULL);

여기였다.... 죽어도 못 찾을거 같았지만.. 죽기 직전 발견했다.

char **split;
if(!(split = (char **)malloc(sizeof(char *) * (words + 1))))
	return (NULL);

한칸 더파줄 때 앞으로 무조건 묶는다 무조건!!!!!!!!!!!!!! sizeof(datatype) * (size) 죽을 때까지 이렇게할거다.

profile
의지와 시간만 있다면 뭐든지 만들 수 있다고 생각하는 개발자입니다.

0개의 댓글