为什么下面的代码编译并执行但没有在输出中打印任何内容,
int i = 0;
printf(i = 0);
但这会产生运行时错误,
int i = 0;
printf(i = 1);
最佳答案
int i = 0;
printf(i = 0);
printf
的第一个参数必须是char*
指向格式字符串的值。您给了它 int
。那就是问题所在。 printf(i = 0)
之间的行为差异和printf(i = 1)
很大程度上是无关紧要的;两者都同样错误。 (有可能第一个传递空指针,并且 printf
以某种方式检测和处理空指针,但这分散了对真正问题的注意力。)
如果你想打印 i = 0
的值,这是正确的做法:
printf("%d\n", i = 0);
您在论证中产生了副作用( i = 0
是赋值,而不是比较),这是合法的,但风格很差。
如果您有所需的#include <stdio.h>
,那么您的编译器必须至少警告您类型不匹配。
如果您没有#include <stdio.h>
,那么你的编译器几乎肯定会警告调用 printf
没有声明。 (C89/C90 编译器并不严格要求对此发出警告,但任何像样的编译器都应该发出警告,并且 C99 或更高版本的编译器必须发出警告。)
当您编译代码时,您的编译器可能会向您发出一个或多个警告。您未能在问题中包含这些警告。您也未能向我们展示完整的独立程序,因此我们只能猜测您是否拥有所需的 #include <stdio.h>
或不。如果您的编译器没有警告您此错误,您需要了解如何要求它进行更好的诊断(如果不知道您正在使用哪个编译器,我们无法提供帮助)。
关于c - 为什么 printf() 会出现运行时错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42600733/