【发布时间】:2018-03-29 02:49:25
【问题描述】:
我正在使用 gdb 调试我的程序,fgets(line, sizeof(line), fp2) 不会从文本文件中读取任何内容。所以程序在while(!feof(fp2)) 处无限循环,并且从未遇到过EOF,我不知道为什么?
我将部分代码用于上下文,
这里是输入文件:
COPY START 1000
FIRST STL RETADR
CLOOP JSUB RDREC
LDA LENGTH
COMP ZERO
JEQ ENDFIL
ZERO WORD 0
RETADR RESW 1
LENGTH RESW 1
BUFFER RESB 4096
RSUB
END FIRST
这里是主程序:
int main(int argc, char *argv[])
{
FILE *fp, *fp2, *fphex;
char line[1000] = "" ;
if (argc != 2)
{
printf("Usage: %s filename\n", argv[0]);
exit(EXIT_FAILURE);
}
if ((fp = fopen(argv[1], "r")) == NULL)
{
printf("Can't open %s\n", argv[1]);
exit(EXIT_FAILURE);
}
fp2 = fopen("intermediate.asm", "w");
fp2 = removecomment(fp,fp2);
rewind(fp2);
while (!feof(fp2))
{
fgets(line, sizeof(line), fp2); /*this fgets reads only 4 bytes of empty spaces*/
parse(line);
}
struct node *print = head;
fphex = fopen("Hex_code", "w");
while(print == NULL)
{
fprintf(fphex, "%s", print->instruction);
print = print->next;
}
return(0);
}
编辑:
虽然(!feof(File*pointer) 不是问题。
我试图从只写 fopen 文件中读取。
我通过fclose(file) fopen("file","r")解决了它
或其他人建议的 w+ 模式。
我认为在阅读模式下关闭和打开更安全。
【问题讨论】:
-
选择tour,阅读How to Ask 和minimal reproducible example。你能把这段代码分解成能说明问题的最小例子吗?
-
您在输出流上调用
fgets和feof,您希望发生什么 -
是的,我正在使用原始帖子进行跟踪,然后所有代码都在我面前发生了变化。我认为 OP 的 guzzintas 与他们的 cumzoutas 交叉。但是 while(!feof()) 无论如何都是错误的。
-
@topcat 您无法从以
"w"模式打开的文件中读取
标签: c debugging while-loop fgets