Исправление KivApple, (текущая версия) :
int len = snprintf(NULL, 0, ...);
char buf[len + 1];
len = snprintf(buf, sizeof(buf), ...);
Не совсем кроссплатформенно (как минимум MSVC не умеет массивы переменной длины, GCC и Clang умеют), но будет делать именно то, что ты хочешь - буфер выделяется на стеке, его гарантированно хватит.
Исправление KivApple, :
int len = snprintf(NULL, 0, ...);
char buf[len + 1];
len = snprintf(buf, sizeof(buf), ...);
Не совсем кроссплатформенно (как минимум MSVC не умеет массивы переменной длины, GCC и Clang умеют), но будет делать именно то, что ты хочешь.
Исходная версия KivApple, :
int len = snprintf(NULL, 0, ...);
char buf[len + 1];
len = snprintf(buf, sizeof(len), ...);
Не совсем кроссплатформенно (как минимум MSVC не умеет массивы переменной длины, GCC и Clang умеют), но будет делать именно то, что ты хочешь.