这有点像个谜..。我刚刚又回到C级,希望这次能掌握它。所以我一直在读http://en.wikipedia.org/wiki/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是从哪里来的-有人知道吗?
编辑
我意识到,这完全是一个错误,因为我误解了我上面引用的文本。谢谢你帮助我认识到这一点。
发布于 2014-01-12 14:17:40
您不能将有效的参数组合传递给三个printf()调用中的两个。这导致了未定义行为。
除其他外,printf本身也识别.
%%。
这意味着格式说明符中的%%将导致将%写入输出。
它与将printf()的返回值(即写入的字符数)传递给另一个printf()调用无关。此外,您的代码甚至不包含%%。
发布于 2014-01-12 14:23:42
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-^https://stackoverflow.com/questions/21075645
复制相似问题