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

好吧,目前*w保存为"true"作为字符串值。
我没有访问它的问题。
indent是整数值,它是2.用*格式理解printf函数

首先,我不明白printf函数在这种情况下如何工作。看起来它有四个参数。 其次,我预计输出为'真',但我什么都没有。为什么它的行为如此?

+0

指出字符串给它的'indent'你会得到它 –

+0

你能解释一下什么不同的值一试前的空格数缩进正是这个printf函数呢? –

+0

[检查此代码](http://codepad.org/HPqLiuXJ),它的输出 –

回答

5

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

"%*s%s" 

意味着你有具有可变字段宽度(字段的长度为整数传递之前该字符串是printf)的字符串。接下来是一个没有填充的字符串。

你的参数是:

indent, "", *w 

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

+0

这是我真正想听到的。谢谢你明确的解释! –

+1

@ user1798211回答你为什么''''而不是''“'......你可以做的任何其他问题。但是,如果你使用''“',那将会有一个空格宽度,那么你需要为'%* s'传递'indent-1'来获得'indent'的缩进。 ''''更清洁,更好地表达意图。 – lurker

+0

我明白了,现在我清楚了*和“”部分。顺便说一下,为什么我没有把“真实”作为输出? –

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

这将打印宽度10你好,它是右对齐。

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

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

这将打印在打印这是由*w

+1

等等,为什么我们将空间表示为“”而不是“”? –

+1

你也可以这样表示。假设indent为3,如果我们不使用indent,它将只打印一个空格。如果我们使用indent,它应该打印3个字符。因此,在空格之前会添加两个额外的空格。如果使用'“ “'这不会打印任何东西,所以三个空格将会因为缩进而打印,并且使用''a”'或'“abc”'而不是'“或”“来查看。 – Gangadhar

+0

您是否知道为什么我不能打印出* w的值?我知道它保存了值,因为我用gdb检查了这个值。 –