使用*格式了解printf函数

Pet*_*ang 1 c

char **w = c->u.word;
printf ("%*s%s", indent, "", *w);
Run Code Online (Sandbox Code Playgroud)

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

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

lur*_*ker 5

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

"%*s%s"
Run Code Online (Sandbox Code Playgroud)

表示您有一个具有可变字段宽度的字符串(字段的长度在字符串到达​​之前作为整数传递printf).接下来是一个字符串,它将打印出没有填充.

你的参数是:

indent, "", *w
Run Code Online (Sandbox Code Playgroud)

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