#define FMT "%-*.*s e = %6ld, chars = %7ld, stat = %3u: %c %c %c %c\n"
此宏传递到printf
函数。 %-*.*s
是什么意思?
答案 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")
将打印与之前相同的内容,但最大字段宽度也作为参数给出。