가변인자에 어떻게 받아와..?
ft_printf("%s", "string")
C
복사
이런 코드에서 가변인자 ap에는 string 전체가 담기는 것일까??
va_arg로 받아올때 char*만큼 받아오면 되더라!
va_arg(ap, char*)
C
복사
옵션들 어떻게 처리할 계획이니..?
//pseudo code
if (-)
{
precision 처리
precision 처리결과 출력
width 처리 후 출력
}
else
{
precision 처리
width 처리 후 출력
precision 처리결과 출력
}
size_t precision 처리 함수 //길이 반환
{
if strlen > precision
return precision
else
return strlen
}
width 처리 함수
{
if (precision의 반환 길이 > width)
return precision의 반환 길이
else
return width
위 분위기 처리 결과에 따라서 공백 출력
}
C
복사
옵션 처리에서 발견한 내 코드의 문제점!
기존 코드의 경우
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_check_option.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: hyson <hyson@42student.42seoul.kr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2021/03/20 17:07:40 by hyson #+# #+# */
/* Updated: 2021/03/24 19:55:18 by hyson ### ########.fr */
/* */
/* ************************************************************************** */
#include "printf.h"
void ft_check_option(t_option *val, char *c)
{
if (*c == '-')
val->minus = 1;
else if (*c == '0')
val->zero = 1;
else if (*c >= '1' && *c <= '9' && val->dot == 0)
val->width = val->width * 10 + *c - '0';
else if (*c == '.')
val->dot = 1;
else if (*c >= '0' &&
val->precision = val->precision * 10 + *c - '0';
}
C
복사
width와 precision의 처리할때 한글자씩 처리하는 모습을 볼 수 있다(precision은 아직 처리해야할 문제가 있어서 미완성..)
이렇게 되면 예를들어 '010'에 대한 옵션처리를 할때 0은 zero flag이고 1뒤의 0은 10으로 표현이 되어야 하는데, 뒤의 0 또한 zero flag에 걸리기 때문에 수정이 필요하다
따라서 atoi 함수를 구현하여서 숫자부분만 다 감아버리는 방식을 선택하기로 했다.