"% - *。* s"是什么意思?在printf格式字符串中

时间:2014-05-21 07:32:46

标签: c printf

#define FMT "%-*.*s e = %6ld, chars = %7ld, stat = %3u: %c %c %c %c\n"

此宏传递到printf函数。 %-*.*s是什么意思?

1 个答案:

答案 0 :(得分:28)

您可以在此处阅读printf的手册页:http://pubs.opengroup.org/onlinepubs/009695399/functions/fprintf.html。但它更像是法律文本而不是教程,所以用有限的英语技能很难理解。

我不知道*.*并且必须自己阅读该手册页。这很有趣。让我们从一个简单的printf("%s", "abc")开始。它将打印字符串abc

printf("%8s", "abc")将打印 abc,包括5个前导空格:8是"字段宽度"。考虑具有列宽的数据表,以便同一列中的数据垂直对齐。默认情况下,数据是右对齐的,适合数字。

printf("%-8s", "abc")将打印abc ,包括5个尾随空格:减号表示字段中的左对齐。

现在为明星: printf("%-*s", 8, "abc")将打印相同的内容。星号表示字段宽度(此处为:8)将作为参数传递给printf。这样就可以通过编程方式进行更改。

现在为"精度",即: printf("%-*.10s", 8, "1234567890123")只打印1234567890,省略最后三个字符:"精度"是字符串的最大字段宽度。这是极少数情况之一(除了舍入,也由精度值控制),其中数据被printf截断。

最后 printf("%-*.*s", 8, 10, "1234567890123")将打印与之前相同的内容,但最大字段宽度也作为参数给出。