Что означает спецификатор формата% * s? - PullRequest
41 голосов
/ 16 июня 2009

В некотором коде, который я должен поддерживать, я видел спецификатор формата %*s. Кто-нибудь может сказать мне, что это такое и почему оно используется?

Пример его использования:

fprintf(outFile, "\n%*s", indent, "");

Ответы [ 5 ]

50 голосов
/ 16 июня 2009

Используется для динамического определения ширины поля :

  • Ширина указана не в строке формата, а в качестве дополнительной целочисленное значение аргумента, предшествующее аргумент, который должен быть отформатирован.

поэтому «отступ» указывает, сколько места нужно выделить для строки, следующей за ним в списке параметров.

Итак,

printf("%*s", 5, "");

совпадает с

printf("%5s", "");

Это хороший способ поместить несколько пробелов в файл, избегая зацикливания.

9 голосов
/ 19 сентября 2013

Не используйте "% * s" в буфере, который не завершен (упакован) пустым значением, думая, что он напечатает только поле "length".

1 голос
/ 14 февраля 2017

Спецификатор формата% 4s выводит строку в ширину поля 4, то есть printf отображает значение по крайней мере с 4 позициями символов.

Если значение, которое нужно вывести, составляет less шириной более 4-х символов, то по умолчанию в поле значение right justified.

Если значение greater превышает 4 позиции символа, ширина поля expands для размещения соответствующего количества символов.

Чтобы выровнять по левому краю значение, используйте отрицательное целое число, чтобы указать ширину поля.

Ссылки: Как программировать на Java ™ (ранние объекты), десятое издание

1 голос
/ 16 июня 2009

http://www.cplusplus.com/reference/clibrary/cstdio/printf/

Ширина указывается не в строке формата, а в качестве дополнительного целочисленного аргумента, предшествующего аргументу, который должен быть отформатирован.

Например: printf("%*s", 4, myValue); равно printf("%4s", myValue);.

0 голосов
/ 16 июня 2009

* Заставляет fprintf дополнять вывод, пока он не станет шириной n символов, где n - целочисленное значение, сохраненное в аргументе функции, предшествующем значению, представленному измененным типом.

printf("%*d", 5, 10) //will result in "10" being printed with a width of 5.
...