Я пишу небольшую программу командной строки, которая читает два числа с плавающей запятой, целое число и небольшую строку (максимум 4 символа) из стандартного ввода.Я пытаюсь выяснить размер буфера, который я должен создать и передать в fgets.Я подумал, что мог бы рассчитать это на основе того, сколько цифр должно быть включено в максимальные значения float
и int
соответственно, например, так:
#include <float.h>
#include <limits.h>
...
int fmax = log10(FLOAT_MAX) + 2; // Digits plus - and .
int imax = log10(INT_MAX) + 1; // Digits plus -
int buflen = 4 + 2*fmax + imax + 4; // 4 chars, 2 floats, 1 int, 3 spaces and \n
...
fgets(inbuf, buflen + 1, stdin);
Но мне пришло в голову, что это на самом деле не можетбудь прав.imax
заканчивается 10 в моей системе, что кажется немного низким, в то время как fmax
, если 40. (Что я думаю, немного выше, учитывая, что более длинные значения могут быть представлены с помощью электронной записи.)
Итак, мой вопрос: это лучший способ решить это?Это даже необходимо?Это просто более элегантно, чем назначить буфер 256 и предположить, что этого будет достаточно.Назовите это делом гордости; P.