什么可能出错? fopen bug

时间:2017-10-13 09:57:10

标签: c file file-io

我的程序开头有以下代码片段:

printf("Starting extraction of file %s \n", tarName);

// Open the tarFile
FILE* tarFile = fopen(tarName, "r");
if(tarFile == NULL) return EXIT_FAILURE;

// Read nFiles
printf("Reading header...");
...

当我从终端执行它时,我得到以下输出:

Starting extraction of file test.mytar 

然后程序冻结,显然从未到达第二个printf

test.mytar是与我的可执行文件位于同一文件夹中的现有文件,这与我执行终端的文件夹相同。

该文件是由我创建的一个字节,所以它可能违反了我不知道的文件约定。

这可能会发生什么?

1 个答案:

答案 0 :(得分:0)

正如评论中所指出的,可能会发生两件事。

a)fopen失败(IO错误,权限被拒绝,文件丢失,......)。要了解确切原因,您需要在Windows上打印errno(或GetLastError()):

if(tarFile == NULL) {
    printf("%s\n", strerror(errno));
    return EXIT_FAILURE;
}

b)fopen成功,但printf("Reading header...");没有显示任何内容,因为消息已缓冲但尚未打印。要解决此问题,您通常可以在邮件末尾添加'\n'