0

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

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

states[type].indent是一个等于 4 的数字,并且buf是 215 字节的缓冲区,其中 0 作为字符串存储在其中,但不确定""并且%*s 是用于的。

任何人都可以帮我阅读这份printf声明吗?

4

6 回答 6

2

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

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

所以这里stat[type].dent是字段宽度,空字符串是字符串。所以这会打印出 4 个字符宽度的空字符串(所以你会得到四个空格),然后是buf.

我推荐一个很好的参考资料,了解printf所有文档的记录位置。

于 2013-08-12T08:32:15.343 回答
2

*意味着要打印的参数的宽度取决于它前面的(整数)参数。

cplusplus

printf ("Width trick: %*d \n", 5, 10); // 5 is the width, 10 is the integer being printed
于 2013-08-12T08:32:23.487 回答
1

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

于 2013-08-12T08:32:24.457 回答
0

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

于 2013-08-12T08:32:37.637 回答
0

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

星号 (*),使用整数参数,它指定要使用的值(用于精度)。

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

于 2013-08-12T08:32:40.080 回答
0

"%*s%s\n"是一种包含3 个指令的格式。

"%*s"

该指令是字符串转换规范。*导致字段宽度 an由int格式后的下一个参数确定。正如 OP 所提到的,这是来自 4 的值stat[type].dent。然后s转换规范获取下一个参数 ( "") 并将其视为指向 的指针char *,它就是。因此printf()打印出来"",根据需要先用空格预填充,最多 4 个。这里需要 4 个填充空格,因为 的字符串长度""为 0。净结果:打印 4 个空格。

"%s"

这个指令,也是一个字符串转换规范,接受下一个参数,,buf假设它是一个char *,它就是,并打印出它的内容。不清楚 OP 是否意味着为0,如果是,则不打印任何内容。

"\n"

这个最终指令只是一个文本,因此"\n"被打印出来。

于 2013-08-12T18:17:28.613 回答