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


ft_printf("%s", "string")

이런 코드에서 가변인자 ap에는 string 전체가 담기는 것일까??

va_arg로 받아올때 char*만큼 받아오면 되더라!

va_arg(ap, char*)

옵션들 어떻게 처리할 계획이니..?


//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
	위 분위기 처리 결과에 따라서 공백 출력
}

옵션 처리에서 발견한 내 코드의 문제점!


기존 코드의 경우

/* ************************************************************************** */
/*                                                                            */
/*                                                        :::      ::::::::   */
/*   ft_check_option.c                                  :+:      :+:    :+:   */
/*                                                    +:+ +:+         +:+     */
/*   By: hyson <[email protected]>         +#+  +:+       +#+        */
/*                                                +#+#+#+#+#+   +#+           */
/*   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';
}

widthprecision의 처리할때 한글자씩 처리하는 모습을 볼 수 있다(precision은 아직 처리해야할 문제가 있어서 미완성..)

이렇게 되면 예를들어 '010'에 대한 옵션처리를 할때 0은 zero flag이고 1뒤의 0은 10으로 표현이 되어야 하는데, 뒤의 0 또한 zero flag에 걸리기 때문에 수정이 필요하다

따라서 atoi 함수를 구현하여서 숫자부분만 다 감아버리는 방식을 선택하기로 했다.