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")
将打印与以前相同,但最大字段宽度也作为参数给出。