[1 Circle] ft_printf : %c,%s
! 구조체의 처리
- %s 에서 중복 옵션의 처리를 수월하게 하기 위해서 구조체의 여러 옵션을 두고 0과 1로 체크를 했다.
! options의 처리 순서
- precise와 width의 개념과 순서를 혼동하여 힘들었다.
- precise는 출력되는 문자열 자체에 적용된 후 width가 적용된다.
- 즉, precise > width > flag 순으로 처리하였다.
! 구현 Logic
- 일반 문자열 출력 >
%%
확인 > 가변인자 출력 순의 반복문
- 옵션들을 읽어올 수 있게
%
후 부분부터 서식지정자까지의 내용을 따로 잘라내어 구조체에 정보 저장
- 구조체를 할당, 초기화, 값을 저장하는 info 부분
- 서식 지정자 별로 개별 함수 출력
- 가변 인자 외에 공백과 '0'의 출력을 담당하는
buf
를 만들고, flag에 따라 가변인자의 출력과 buf의 순서를 조정하였다.
✓ %c 구현하기
- 적용되는 flag :
-*
(중복 가능)
- precise 적용 안됨
- width가 0일 경우, 1로 처리
- 코드 구조상, width가 0으로 들어왔다는 것은 width의 입력이 없고 *을 통한 인자도 없다는 것
- 버퍼를 malloc 후 bewhat(bezero의 변형)를 통한 공백처리 (width - 1) 만큼
- 0이 들어가지 않으니 정렬을 쉽게 하기 위해서
- flag 확인후 -일 경우, 글자 출력 후 버퍼 출력
- 없을 경우 버퍼 출력 후 글자 출력
%s 구현하기
- 적용되는 flag :
-*
(중복 가능)
- precise가 적용된다.
- 가변 인자 문자열을 새로 할당하여 ret에 저장
- 문자열의 길이를 확인하고 width와 precise 처리
- 입력받은 width <= len일 경우, width = len.
- precise를 입력 받았으며, 그 길이가 len보다 짧으면 ret 잘라주기
- buf 할당 : width - ret의 길이(재산정)
- 플래그에 따라 순서를 바꿔서 ret과 버퍼 출력!