Подробнее здесь .
целочисленное значение или *
, указывающее минимальную ширину поля.Результат дополняется пробелами (по умолчанию), если требуется, слева, когда выровнено по правому краю, или справа, если выровнено по левому краю.В случае использования * ширина определяется дополнительным аргументом типа int.Если значение аргумента является отрицательным, это приводит к указанному флагу и положительной ширине поля.(Примечание. Это минимальная ширина: значение никогда не усекается.)
.
, за которым следует целое число или *, или ни то, ни другое, которое указывает точность преобразования.В случае использования * точность указывается с помощью дополнительного аргумента типа int.Если значение этого аргумента отрицательно, оно игнорируется.Если ни число, ни * не используются, точность принимается за ноль.В таблице ниже приведены точные эффекты точности.
Так что, если мы попробуем обе спецификации преобразования
#include <stdio.h>
int main() {
int precision = 8;
int biggerPrecision = 16;
const char *greetings = "Hello world";
printf("|%.8s|\n", greetings);
printf("|%.*s|\n", precision , greetings);
printf("|%16s|\n", greetings);
printf("|%*s|\n", biggerPrecision , greetings);
return 0;
}
, мы получим вывод:
|Hello wo|
|Hello wo|
| Hello world|
| Hello world|