Один из способов сделать это (не обязательно рекомендуется), который дает точный размер числа в символах, - это использование самих функций stdio
.
Например, если вы распечатываете номер (где-то, по любой причине) до того, как выделите свою память, вы можете использовать идентификатор формата %n
с printf
. %n
ничего не печатает; скорее, вы предоставляете ему указатель на int
, а printf
заполняет его тем, сколько символов было написано до сих пор.
Другой пример - snprintf
, если он у вас есть. Вы передаете ему максимальное количество символов, которое вы хотите записать в вашу строку, и оно возвращает количество символов, которое должно было написано , не считая окончательного nul. (Или -1 при ошибке.) Итак, используя 1-байтовую фиктивную строку, snprintf
может точно сказать, сколько символов соответствует вашему числу.
Большим преимуществом использования этих функций является то, что если вы решите изменить формат вашего числа (начальные 0, пробельные символы, восьмеричный вывод, длинные длинные значения и т. Д.), Вы не переполните свою память.
Если у вас есть расширения GNU для stdio
, вы можете рассмотреть возможность использования asprintf
. Это точно так же, как sprintf
, за исключением того, что оно выделяет вам память! Сборка не требуется. (Хотя вам нужно освободить его самостоятельно.) Но вы не должны полагаться на то, что он переносим.