Salt & Light

[42seoul] ft_printf 훑어보기~! 본문

42seoul

[42seoul] ft_printf 훑어보기~!

Salt & Light 2022. 4. 6. 14:42

ft_printf는 무엇인가??


프로그램 이름 libftprintf.a
제출할 파일 *.c, */*.c, *.h, */*.h, Makefile
Makefile 규칙 all, clean, fclean, re, bonus
사용가능한외부 함수 malloc, free, write, va_start, va_arg, va_copy, va_end
직접 만든 libft 사용 가능
설명 실제 printf의 동작을 모방한 ft_printf를 포함하는 라이브러리를 작성하세요.
함수 원형
int ft_printf(const char *format, ...);

 


 

ft_printf 함수는 사용자가 입력한 format과 가변 인자(...) 들을 이용해서 출력해주는 함수입니다.

ft_printf에서 구현할 서식지정자(format specifier)는 cspdiuxX% 가 있습니다.

위의 서식지정자들을 각각 구현해야 합니다.

아래의 표는 각각의 서식지정자가 해야 할 역할입니다.

 

%c 문자(char) 출력
%s 문자열(char *)출력
%p 포인터의  주소를 16진수로 출력
%d int형의 십진수 출력.
%i int형의 십진수 출력. (%d와 동일)
%u unsigned int형의 십진수 출력.
%x int형의 정수를 16진수 소문자로 출력.
%X int형의 정수를 16진수 대문자로 출력.
%% 단순 '%' 출력.

 

가변 인자 사용

ft_printf에서는 가변 인자를 받아와 사용하기 위해 <stdarg.h>에  있는 함수들을 사용합니다.

가변 인자란 매개변수의 값이 고정되어있지 않은 것을 말합니다.

즉, 상황에 따라 인자의 수가 다른 매개변수입니다.

주의할 점은 가변 인자를 받는 함수는 고정 매개변수가 하나 이상 있어야 한다는 것입니다.

va_list ap(변수명) 가변 인자 목록.
가변 인자의 메모리 주소를 저장하는 포인터다.
va_start(va_list ap, last) 가변 인자 목록의 시작점을 지정.
마지막 고정 인자를 넘겨줘야 된다.
ft_printf의 경우는 format이 마지막 고정인자가 된다.
ex) va_start(ap, format); 으로 하면
format다음 주소로 ap의 주소가 설정된다.
va_arg(va_list ap, type) 가변 인자 포인터에서 특정 자료형 크기만큼 값을 가져오고 자료형의 크기만큼 정방향 이동함.ex) va_arg(ap, int);로 하면 sizeof(int)만큼 값을 읽어오고 sizeof(int)만큼 이동한다.
va_end(va_list ap) 가변 인자 처리가 끝났을 때 포인터를 NULL로 초기화 시켜준다.

 

이 부분만 잘 고려해서 구현하시면 큰 어려움을 없을 겁니다!

 

아래는 제가 사용했던 테스터입니다!!

https://github.com/Tripouille/printfTester

 

GitHub - Tripouille/printfTester: Tester for the ft_printf project of 42 school

Tester for the ft_printf project of 42 school. Contribute to Tripouille/printfTester development by creating an account on GitHub.

github.com

https://github.com/paulo-santana/ft_printf_tester

 

GitHub - paulo-santana/ft_printf_tester: A tester for the ft_printf 42 project.

A tester for the ft_printf 42 project. Contribute to paulo-santana/ft_printf_tester development by creating an account on GitHub.

github.com

 

Comments