Я только что заметил следующее в стандарте C99 ISO, 7.19.6.1 The fprintf function
, подраздел 6, подробно описывающий флаги преобразования, в частности флаг 0
:
0: d, i, o, u, x, X, a, A, e, E, f, F, g и G преобразования, ведущие нули (после любого указания знака или base) используются для заполнения ширины поля, а не для заполнения пробелов, за исключением случаев преобразования бесконечности или NaN.
Пока все хорошо, я знаю, что следующие строки будут отображать вывод:
printf ("%5d\n", 7); // produces " 7"
printf ("%05d\n",7); // produces "00007"
Однако, в подразделе 8, детализирующем модификаторы преобразования, я вижу:
d, i: Аргумент int преобразуется в десятичное число со знаком в стиле [-] dddd. Точность определяет минимальное количество отображаемых цифр; если конвертируемое значение может быть представлено меньшим количеством цифр, оно расширяется ведущими нулями.
Это явно не тот случай, так как по умолчанию используется заполнение пробелами, , а не нулями. Или я что-то здесь не так понимаю?