char **w = c->u.word;
printf ("%*s%s", indent, "", *w);
好的,目前,*w
将"true"
保留为字符串值
我访问它没有问题
indent是整数值,即2。
首先,我不明白printf函数在这种情况下是如何工作的。看起来它有四个参数。 其次,我预计输出为“真实”,但我什么也没得到。它为什么会这样?
答案 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