我正在使用gdb调试我的程序,fgets(line,sizeof(line),fp2)从文本文件中读取任何内容。所以程序循环无限侧while(!feof(fp2))
并且EOF永远不会满足我不知道为什么?
我将部分代码放在上下文中,
这里是inputfile:
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(文件*指针)不是问题。
我试图从只写的fopen文件中读取。
我通过fclose(file) fopen("file","r")
解决了这个问题
或者其他人建议的w +模式。
我认为在阅读模式下关闭和打开更安全。
答案 0 :(得分:3)
好的,这是问题,你有StorageFolder storageFolder = ApplicationData.Current.LocalFolder;
StorageFile file1 = await storageFolder.GetFileAsync("Image.png");
string _b64 = Convert.ToBase64String(File.ReadAllBytes(file1.Path));
作为文件打开模式。
"w"
应该是
fp2 = fopen("intermediate.asm", "w");
文件打开模式
比你有fp2 = fopen("intermediate.asm", "r");
符号意味着:
答案 1 :(得分:0)
fp2以写入模式“w”打开,所以它必须关闭然后以读取模式“r”打开,这样才能正确读取行,人们可以发现它而不是说它的while(!feof(fp2)) 。)

答案 2 :(得分:-1)
我相信这已得到很好的解决here,如果你替换while(!feof(fp2))
--->它会解决while(!feof(fp2) && !ferror(fp2))