Что означает спецификатор формата %*s?
-
05-07-2019 - |
Вопрос
В некотором коде, который мне приходится поддерживать, я видел спецификатор формата %*s
.Может ли кто-нибудь сказать мне, что это такое и почему оно используется?
Пример его использования выглядит так:
fprintf(outFile, "\n%*s", indent, "");
Решение
Он используется для динамического указания ширины поля.:
- Ширина не указана в строке формата, но как дополнительный аргумент целочисленного значения, предшествующий аргументу, который должен быть отформатирован.
поэтому «отступ» указывает, сколько места нужно выделить для строки, следующей за ней в списке параметров.
Так,
printf("%*s", 5, "");
такой же как
printf("%5s", "");
Это хороший способ добавить в файл несколько пробелов, избежав цикла.
Другие советы
Не используйте "% * s " в буфере, который не является NULL-завершенным (упакованным), думая, что он будет печатать только "length" поле. р>
http://www.cplusplus.com/reference/clibrary/cstdio/ Printf / р>
Ширина указывается не в строке формата, а в качестве дополнительного целочисленного аргумента, предшествующего аргументу, который должен быть отформатирован.
например: printf ("% * s " ;, 4, myValue);
равнозначно printf ("% 4s " ;, myValue);
. р>
Спецификатор формата% 4s выводит строку в ширину поля 4 & # 8212; то есть printf отображает значение по крайней мере с 4 позициями символов.
Если значение для вывода меньше
, чем 4 позиции символа, значение по умолчанию выровнено по правому краю
в поле.
Если значение больше
, чем 4 позиции символов, ширина поля увеличивается
для размещения соответствующего количества символов.
Чтобы выровнять значение по левому краю, используйте отрицательное целое число, чтобы указать ширину поля.
Ссылки: Java & # 8482; Как программировать (ранние объекты), десятое издание
* Заставляет fprintf дополнять вывод, пока он не станет шириной n символов, где n - целочисленное значение, сохраненное в аргументе функции, предшествующем тому, который представлен измененным типом.
printf("%*d", 5, 10) //will result in "10" being printed with a width of 5.