ft_printf(3) %s
- 저는 len과 prec을 먼저 처리하고 그다음 width를 비교하는 순서를 선택했습니다.
- 가변인자의 길이를 len으로 명명하겠습니다.
- len과 prec을 처리한 문자열을 disp라고 명명하겠습니다.
- 사용 가능한 플래그: '-'
case 및 예시
- 아래 예시들의 s는 [char *s = "42Seoul"]로 초기화했습니다.
- case1: len > width, no prec: 가변인자 모두 출력합니다.
(기본적으로 len보다 width가 크다면, width를 무시하고 len 모두 출력)
printf("case1\n");
result_f = ft_printf("-->|%3s|<--\n", s);
result_r = printf("-->|%3s|<--\n", s);
printf("result_f = %d\nresult_r = %d\n\n", result_f, result_r);
case1
-->|42Seoul|<--
-->|42Seoul|<--
result_f = 16
result_r = 16
- case2: len < width, no prec: len 출력 후 남는 공간 공백으로 채웁니다.
('-'플래그 있으면 왼쪽정렬, 없으면 오른쪽 정렬)
printf("case2\n");
result_f = ft_printf("-->|%10s|<--\n", s);
result_r = printf("-->|%10s|<--\n", s);
printf("result_f = %d\nresult_r = %d\n\n", result_f, result_r);
case2
-->| 42Seoul|<--
-->| 42Seoul|<--
result_f = 19
result_r = 19
- case3: len > prec, no width: 가변인자의 앞단을 prec만큼 자른 disp를 출력합니다.
printf("case3\n");
result_f = ft_printf("-->|%.4s|<--\n", s);
result_r = printf("-->|%.4s|<--\n", s);
printf("result_f = %d\nresult_r = %d\n\n", result_f, result_r);
case3
-->|42Se|<--
-->|42Se|<--
result_f = 13
result_r = 13
- case4: len > prec, width < disp_len: case1과 같이 width가 무시됩니다.
printf("case4\n");
result_f = ft_printf("-->|%3.4s|<--\n", s);
result_r = printf("-->|%3.4s|<--\n", s);
printf("result_f = %d\nresult_r = %d\n\n", result_f, result_r);
case4
-->|42Se|<--
-->|42Se|<--
result_f = 13
result_r = 13
- case5: len > prec, width > disp_len: 3과 같이 남는 공간을 공백으로 채웁니다.
printf("case5\n");
result_f = ft_printf("-->|%7.4s|<--\n", s);
result_r = printf("-->|%7.4s|<--\n", s);
printf("result_f = %d\nresult_r = %d\n\n", result_f, result_r);
case5
-->| 42Se|<--
-->| 42Se|<--
result_f = 16
result_r = 16
- case6: len < prec, no width: prec이 없는 것처럼 생각합니다.
printf("case6\n");
result_f = ft_printf("-->|%.9s|<--\n", s);
result_r = printf("-->|%.9s|<--\n", s);
printf("result_f = %d\nresult_r = %d\n\n", result_f, result_r);
case6
-->|42Seoul|<--
-->|42Seoul|<--
result_f = 16
result_r = 16
- case7: len < prec, width < len : 출력해야할 문자열보다 width가 작으므로, 4처럼 출력합니다.
printf("case7\n");
result_f = ft_printf("-->|%7.9s|<--\n", s);
result_r = printf("-->|%7.9s|<--\n", s);
printf("result_f = %d\nresult_r = %d\n\n", result_f, result_r);
case7
-->|42Seoul|<--
-->|42Seoul|<--
result_f = 16
result_r = 16
- case8: len < prec, width > len : 출력해야할 문자열보다 width가 크므로, 5처럼 출력합니다.
printf("case8\n");
result_f = ft_printf("-->|%10.9s|<--\n", s);
result_r = printf("-->|%10.9s|<--\n", s);
printf("result_f = %d\nresult_r = %d\n\n", result_f, result_r);
case8
-->| 42Seoul|<--
-->| 42Seoul|<--
result_f = 19
result_r = 19
잘 읽었습니다 : ) 케이스 별로 꼼꼼하게 정리 잘 해놓으신 것 같아요!!