[1 Circle] ft_printf : %c,%s

Suffergo·2021년 2월 26일
0

42seoul - 1 Circle

목록 보기
4/4

! 구조체의 처리

  • %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과 버퍼 출력!
profile
파도가 칠 때는 서핑을

0개의 댓글