[英]How do I interpret this printf in C
我正在阅读一些代码,在那里我不得不阅读printf语句:
printf("%*s%s\n", stat[type].dent, "", buf);
states[type].indent
是一个等于4的数字,而buf
是215字节的缓冲区,其中0作为字符串存储在字符串中,但不确定""
和%*s
的含义。
有人可以帮助我阅读此printf
声明吗?
*
表示要打印的参数的宽度取决于其前面的(整数)参数。
来自cplusplus :
printf ("Width trick: %*d \n", 5, 10); // 5 is the width, 10 is the integer being printed
%*s
是字符串转换。 *
部分表示字段的宽度将作为参数提供(这就是使用stat[type].dent
方式)。 因此,它以指定的宽度打印一个空字符串(称为N)。 换句话说,在打印出buf
之前,它会留下N个空格。
*
将被stat[type].dent
的值代替,该值是一个数字,称为最小字段宽度。
这是一种精度,它指定用于字符串转换的最大字节数。
星号(*)使用整数参数,该参数指定要使用的值(精度)。
要打印可变长度的字符串,请指定printf("%*s", l, string)
。 l
代替星号。
"%*s%s\\n"
是一种包含3个指令的格式。
"%*s"
此伪指令是字符串转换规范。 *
使字段宽度int
从格式之后的下一个参数确定。 如OP所述,这是stat[type].dent
的4值。 然后, s
转换规范获取下一个参数( ""
)并将其视为指向char *
的指针。 因此, printf()
打印出""
,并根据需要先填充最多4个空格。 这里需要4个填充空格,因为字符串""
长度为0。最终结果:打印了4个空格。
"%s"
该指令也是一个字符串转换规范,它使用下一个参数buf
,假设它是char *
,并输出其内容。 不清楚OP是否表示全为 0,如果是,则不打印任何内容。
"\\n"
该最终指令仅是文本,因此将打印"\\n"
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.