Search
Duplicate

%s 구현 story

분류
%s
visible
no
과제
ft_printf
생성일
2021/03/23 07:29
작성자
nj_blog
최종 편집일
2021/03/25 07:06
Property

가변인자에 어떻게 받아와..?

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
복사
widthprecision의 처리할때 한글자씩 처리하는 모습을 볼 수 있다(precision은 아직 처리해야할 문제가 있어서 미완성..)
이렇게 되면 예를들어 '010'에 대한 옵션처리를 할때 0은 zero flag이고 1뒤의 0은 10으로 표현이 되어야 하는데, 뒤의 0 또한 zero flag에 걸리기 때문에 수정이 필요하다
따라서 atoi 함수를 구현하여서 숫자부분만 다 감아버리는 방식을 선택하기로 했다.