ft_printf 42
Geral
NÃO COPIE, ENTENDA!!
Protótipo da função:
1 | int ft_prinf(const char *, ...) |
A ideia é reescrever a função printf()
Descrição
Uma pequena descrição das conversões requeridas:
• %c imprime um único caractere.
• %s imprime uma string.
• %p O argumento void * ponteiro é impresso em hexadecimal.
• %d imprime um número decimal (base 10).
• %i imprime um inteiro na base 10.
• %u imprime um número decimal sem sinal (base 10).
• %x imprime um número em hexadecimal (base 16).
• %% imprimir um sinal de porcentagem.
A primeira coisa a se fazer é criar uma variável do tipo va_list
, sendo assim:
1 | va_list ap |
e daí chamamos a macro va_start(va_list ap, last_arg)
onde o last_arg
é o ultimo argumento conhecido da função, antes das “…”:
1 | //Se a func for a ft_printf |
💻 Então, a base da ft_printf é basicamente assim:
1 | int ft_printf(const char *format, ...) |
caso não tenha visto a strchr acesse aqui e aqui.
a função ft_printf_arg(const char *fmt, int i, va_list ap)
serve como um switch case, pra cada flag que recebe:
1 | /* |
Função ft_putchar()
A função putchar() foi desenvolvida no projeto libft, e ela imprime um caracter com a função write()
. Usei uma personalizada, já que a saída seria a padrão.
1 | int ft_putchar(char c) |
Função ft_putstr()
A putstr() imprime uma cadeia de caracteres. Ela precisou também ser personalizada, pois quando recebido uma string vazia, deve ser impresso na saida padrão a string (null)
.
1 | int ft_putstr(char *str) |
ft_putnbr()
Imprime os caracteres que representam os numeros. Como a write()
só imprime caracteres, é preciso transformar os numeros em string, e pra isso a função itoa
é usada.
1 | int ft_putnbr(int nbr) |
putnbr_u
Uma variação da putnbr()
e da itoa
, a diferença é que recebem como parâmentro um unsigned int
.
1 | int putnbr_u(unsigned int nbr) |