Вопрос

В некотором коде, который мне приходится поддерживать, я видел спецификатор формата %*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.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top