【发布时间】:2017-10-13 09:57:09
【问题描述】:
我的程序开头有以下 sn-p 代码:
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 是与我的可执行文件位于同一文件夹中的现有文件,这是我执行终端的同一文件夹。
这个文件是我一个字节一个字节地创建的,所以它可能违反了我不知道的文件约定。
这里可能发生了什么?
【问题讨论】:
-
在
fopen之后和 if 之前添加一个打印语句。打印出来了吗? -
你还应该展示函数是如何被调用的以及函数返回时执行的代码
-
... 并在 all
printf中有一个\n -
@4386427
\n刷新stdout缓冲区是特定于平台的。确保缓冲区刷新的正确方法是禁用缓冲、显式设置行缓冲或实际刷新它。 -
@AndrewHenle 对于一个终端(我假设在那里),我认为它可以