Я пишу небольшую программу командной строки, которая считывает два числа с плавающей запятой, целое число и небольшую строку (максимум 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. (Что, как мне кажется, немного многовато, учитывая, что более длинные значения могут быть представлены с помощью нотации e.)
Итак, мой вопрос: это лучший способ решить эту проблему? Это вообще необходимо? Просто это кажется более элегантным, чем назначать буфер размером 256 и предполагать, что этого будет достаточно. Назовите это вопросом гордости ;P.
@user
. - person Lightness Races in Orbit   schedule 19.09.2011