我正在阅读一些代码,我在阅读printf语句时遇到了困难:
printf("%*s%s\n", stat[type].dent, "", buf);
states[type].indent
是一个等于4的数字,buf
是215字节的缓冲区,其中0作为字符串进入,但不确定""
和%*s
是什么意思对
有人可以帮我看一下printf
声明吗?
答案 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"
。