我如何在C中解释这个printf

时间:2013-08-12 08:28:00

标签: c

我正在阅读一些代码,我在阅读printf语句时遇到了困难:

printf("%*s%s\n", stat[type].dent, "", buf);

states[type].indent是一个等于4的数字,buf是215字节的缓冲区,其中0作为字符串进入,但不确定""%*s是什么意思对

有人可以帮我看一下printf声明吗?

6 个答案:

答案 0 :(得分:2)

格式代码*中的"%*s"告诉printf下一个参数是字段宽度,后跟普通参数(在本例中为字符串)。

它与例如在您的情况下"%4s",但宽度可以在运行时设置。

所以这里stat[type].dent是字段宽度,空字符串是字符串。因此,这将打印宽度为4个字符的空字符串(因此您获得四个空格),然后是buf中的任何内容。

我推荐一个好的reference on printf,并将其全部记录下来。

答案 1 :(得分:2)

*表示要打印的参数的宽度取决于它之前的(整数)参数。

来自cplusplus

printf ("Width trick: %*d \n", 5, 10); // 5 is the width, 10 is the integer being printed

答案 2 :(得分:1)

%*s是字符串转换。 *部分意味着该字段的宽度将作为参数提供(即stat[type].dent的使用方式)。所以它打印一个指定宽度的空字符串(称之为N)。换句话说,在打印出buf之前,它会留下N个空格。

答案 3 :(得分:0)

*将替换为stat[type].dent的值,这是一个数字,将被称为最小字段宽度。

答案 4 :(得分:0)

它是一个精度,它指定字符串转换的最大字节数。

Asterisk(*),使用整数参数,该参数指定要使用的值(用于精度)。

要打印可变长度的字符串,请指定printf("%*s", l, string)l代替星号。

答案 5 :(得分:0)

"%*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"