ft_printf is a 42 Project that aims to mimic libc printf function
Basics, requested from subject:
- parsing for flags, field_width, precision, length_modifier
- parsing for conversion specifier
- displaying UTF-8 characters (%C and %S)
- computing unsigned numbers in base 2 (%b), 8 (%o, %O), 10 (%u, %U) and 16 (%x, %X)
- displaying signed numbers (%d, %D, %i)
- displaying pointer address (%p)
Bonus:
- wildcard_length_modifier (%*) : replaces precision and field_width with parameter in va_list ap
- handles colors
- handles multi fd (use ft_dprintf(int fd, char const format, ...) instead of ft_printf)
- returns the string only with ft_asprintf
- mades variadics printf family functions like
vprintf
,vdprintf
, andvasprinft
int ft_printf(const char *str, ...);
int ft_dprintf(int fd, const char *str, ...);
int ft_asprintf(char **str, const char *fmt, ...);
int ft_vprintf(const char *str, va_list ap);
int ft_vdprintf(int fd, const char *str, va_list ap);
int ft_vasprintf(char **str, const char *fmt, va_list ap);
https://linux.die.net/man/3/printf
$> make
libftprintf.a is created. Then:
$> gcc example_main.c -L. -lftprintf -Iincludes_folder
#include "ft_printf.h"
ft_printf("%sstring : %s, dec : %d, binary nb: %b, octal nb: %o, unsigned nb: %u, hexadecimal nb: %x, with uppercase: %X%s\n", F_GREEN, "42", 42, 42, 42, 42, 42, 42, F_NO);
ft_printf("%S\n", L"잘했지 ?");
$> string : 42, dec : 42, binary nb: 101010, octal nb: 52, unsigned nb: 42, hexadecimal nb: 2a, with uppercase: 2A
$> 잘했지 ?