c - 为什么 printf() 会出现运行时错误?

标签 c printf

为什么下面的代码编译并执行但没有在输出中打印任何内容,

    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/

相关文章:

c - c中的struct语句,这两个有区别吗?

c - 给定一些指令实现一个简单的自旋锁

r - 如何避免 R sprintf ("very very long string with line break") 中的换行符?

c - 如何在多线程中使用 printf()

c - -C 中 printf 中的 NaN

c - printf 语句未在 netbean 中的 scanf 语句之前执行

c - TCPDump/libpcap - 查找有效负载数据的内存位置

c - 甚至以向后方式排列数组的字符串

c - 函数 SpacePlug 将一个指向字符串的指针和另一个字符作为参数。

c - fgets 清除我的 C 文件的内容并且不允许我打印到文件