printf格式字符串中“% – *。* s”的含义是什么

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

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

您可以在此处阅读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") 。10s printf("%-*.10s", 8, "1234567890123")将仅打印1234567890 ,省略最后三个字符:“precision”是字符串情况下的最大字段宽度。 这是极少数情况之一(除了舍入,也由精度值控制),其中数据被printf截断。

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