This repository has been archived by the owner on Aug 9, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Home
minjungk edited this page Jun 12, 2024
·
3 revisions
Welcome to the ft_printf wiki!
-
#
: 진법에 맞게 맨 앞에0
,0x
,0X
추가 -
+
옵션있으면 무시됨) -
+
: 양수일 땐 +, 음수일 땐 - 출력 (default : 음수 부호만 표시) -
0
: width에 맞게 주어진 빈자리를 0으로 채움 (-
옵션있으면 무시됨) -
-
: width에 맞게 왼쪽 정렬. 빈자리를 공백으로 채움 (default : 우측 정렬)
타입 | # |
|
+ |
0 |
- |
width |
. precision |
---|---|---|---|---|---|---|---|
%% | 무시 | 무시 | 무시 | 무시 | 무시 | 무시 | 무시 |
%c | 무시 | 무시 | 무시 | 0 채우기 | 왼쪽 정렬 | 최소 버퍼 크기 | 무시 |
%s | 무시 | 무시 | 무시 | 0 채우기 | 왼쪽 정렬 | 최소 버퍼 크기 | 최대 출력 개수 |
%d, %i | 무시 | 변환 | 변환 | precision만큼 0 채우기 | 왼쪽 정렬 | 최소 버퍼 크기 | 최소 출력 개수 |
%u | 무시 | 무시 | 무시 | precision만큼 0 채우기 | 왼쪽 정렬 | 최소 버퍼 크기 | 최소 출력 개수 |
%x, %X | 변환 | 무시 | 무시 | precision만큼 0 채우기 | 왼쪽 정렬 | 최소 버퍼 크기 | 최소 출력 개수 |
%p | 무시 | 무시 | 무시 | 무시 | 왼쪽 정렬 | 최소 버퍼 크기 | 무시 |
- 플래그 설정
-
#
,0
,+
,-
인 경우 반복을 돌면서 플래그 설정
-
- width 설정
-
ft_atoi
함수를 사용하여 width 값 읽기 -
ft_isdigit
함수를 사용하여 width 만큼 주소 이동 - 한 바이트 만큼 읽어서 type 저장
-
- type이
.
인 경우 precision 설정-
ft_atoi
함수를 사용하여 precision 값 읽기 -
ft_isdigit
함수를 사용하여 precision 만큼 주소 이동 - 한 바이트 만큼 읽어서 type 저장
-
int slen = ft_strlen(s);
if (type == 's') slen = precision;
if (type != 's' && precision < slen) precision = slen;
if (OPT_FOUND) precision += 2; // "0x"
if (OPT_BLANK | OPT_FLUS) precision += 1; // ' ' '+' (생략했지만, 음수 값인 경우도 포함)
if (width < precision) width = precision;
-
[ ]
: width 만큼의 버퍼를 생성한 뒤 공백( -
[000000 ]
: 정렬 옵션에 따라 precision 만큼0
으로 초기화한다. -
[000123 ]
: 정렬 옵션에 따라 결과 값을 precision 위치에서 부터 채운다.
rtn = ft_calloc(width + 1, sizeof(char);
ft_memset(rtn, ' ', width);
if (OPT_ZERO && !OPT_PREC) precision = width;
if (OPT_MINUS) ft_memset(rtn, '0', precision);
else ft_memset(rtn + width - precision, '0', precision);
if (OPT_MINUS) ft_memcpy(rtn, s, slen);
else ft_mempcy(rtn + end - slen, s, slen);
-
%udx
- 인자가
NULL
이고 정밀도가 0으로 설정된 경우 아무것도 복사하지 않는다.
- 인자가
-
%s
- 인자가
NULL
이고 정밀도가 없으면(null)
을 복사한다. - 인자가 있는 경우 width 만큼의 버퍼를 할당하고 정밀도 만큼만 복사한다.
char *s = va_arg(ap, char *); if (s == 0) s = "(null)";
- 인자가