这就像是一个谜题......我刚回到C再次想要掌握它。所以我一直在阅读 The C Programming Language ,我接受了这个声明:
其中,printf也认可...... %%。
我之前不知道的事情。所以我开始通过编写这一小段代码来使用这个功能:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv) {
int number = 300;
printf("%\n\n%12d\n\n\n\n\n", printf("%\n\n\n\n\n\n", printf("%s", "foooo!")), number);
return (EXIT_SUCCESS);
}
这是输出:
我希望输出中 300 。 2 来自哪里 - 有人知道吗?
我意识到这完全是一个错误,因为我误解了上面引用的文字。非常感谢帮助我实现这一点。
答案 0 :(得分:11)
您没有将有效的参数组合传递给三个printf()
个调用中的两个。这会产生undefined behaviour。
其中,printf还为自己识别......
%%
。
这意味着格式说明符中的%%
会导致%
被写入输出。
它与将printf()
的返回值(即写入的字符数)传递给另一个printf()
调用无关。此外,您的代码甚至不包含%%
。
答案 1 :(得分:2)
A % followed by another % character will write a single % to the stream.
它看到%
后跟一个\n
,它不是有效的格式说明符。您的格式字符串也与您的参数不匹配。 printf
的返回值是成功写入的字符数。因此它是一个数字。如果您的格式字符串与传递给printf
的参数数量不匹配,则它是未定义的行为。
printf("%12d %d ", printf("%d", printf("%s", "foooo!")), number);
number ret of printf--^ ret of printf-^