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

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

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

4

2 回答 2

5

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

"%*s%s"

意味着您有一个具有可变字段宽度的字符串(字段的长度在字符串为 to 之前作为整数传递printf)。后面是一个字符串,该字符串将不带填充打印。

你的参数是:

indent, "", *w

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

于 2013-10-07T18:06:43.993 回答
1
printf("%10s","Hello"); 

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

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

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

这将在打印指向的字符串之前打印缩进的空格数*w

于 2013-10-07T18:06:52.730 回答