Полная реализация s21_sprintf — форматированный вывод в строку (Part 2 + Part 3).
int s21_sprintf(char *str, const char *format, ...);
typedef struct {
int flags_minus, flags_plus, flags_space, flags_hash, flags_zero;
int width; // -1 если не задана
int precision; // -1 если не задана
char length; // 'h', 'l', 'L' или 0
char specifier; // 'd', 's', 'f', и т.д.
} s21_format_t;
specifier вызывает обработчикd, i, u, o, x, Xf, e, E, g, Gc, sp%c, d, f, s, u, %-, +, (пробел).числоh, lg, G, e, E, x, X, o, p#, 0*.*LКаждый кейс — сравнение со стандартным sprintf:
char a[256], b[256];
s21_sprintf(a, format, args...);
sprintf(b, format, args...);
ck_assert_str_eq(a, b);
Не забыть про:
INT_MIN, INT_MAX, LONG_MIN, отрицательные дроби0.0, INFINITY, NANNULL для %s...
...
...
%s и %c...
%p, %n, %%...
...
%g / %G...