在简单程序中使用ferror()时出现分段错误.为什么?

Abh*_*ogi 1 c gdb

为什么下面的代码给出了分段错误?

#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE *file;
    file = fopen("text","r");
    if (file == NULL) printf("Error READING FILE");
    if (ferror(file)) printf("error reading file");    //line 9
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在gdb中执行backtrace给出: -

> #0  0x00007ffff7ad9d30 in ferror () from /lib/libc.so.6
> #1  0x00000000004005fa in main () at test.c:9

erg*_*sys 7

file为NULL.您没有看到第一个printf,因为程序在刷新stdout之前崩溃了.

  • 当您打印换行符*,或缓冲区已满或程序结束时.(*):默认情况下,`stdout`在大多数系统上都是行缓冲的.您还应该在`stderr`上打印错误消息:通常它是无缓冲的(但更重要的是,错误消息应该转到`stderr`,而不是'stdout`). (2认同)