使用*格式了解printf函数

时间:2013-10-07 17:59:02

标签: c

char **w = c->u.word;
printf ("%*s%s", indent, "", *w);

好的,目前,*w"true"保留为字符串值 我访问它没有问题 indent是整数值,即2。

首先,我不明白printf函数在这种情况下是如何工作的。看起来它有四个参数。 其次,我预计输出为“真实”,但我什么也没得到。它为什么会这样?

2 个答案:

答案 0 :(得分:5)

星号(*)表示您可以定义可变字段宽度。所以

"%*s%s"

表示你有一个带有可变字段宽度的字符串(字符串的长度在字符串到printf之前作为整数传递)。接下来是一个没有填充的字符串。

您的参数是:

indent, "", *w

在格式中,indent对应于星号(*),""对应于s中的%*s*w }对应做%s。因此,这将打印一个零长度字符串,其字段宽度为indent,后跟*w指向的字符串。换句话说,您将始终在输出中的字符串indent前面获得*w个空格。

答案 1 :(得分:1)

printf("%10s","Hello"); 

这将打印宽度为10的hello,它是右对齐的。

printf("%*s",10,"Hello");  //is same  as above 

printf ("%*s%s", indent, "", *w);

这将在打印由*w

指向的字符串之前打印缩进的空格数