我的程序开头有以下代码片段:
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
是与我的可执行文件位于同一文件夹中的现有文件,这与我执行终端的文件夹相同。
该文件是由我创建的一个字节,所以它可能违反了我不知道的文件约定。
这可能会发生什么?
答案 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'
。