fgets什么时候停止读线?

时间:2018-03-29 02:49:25

标签: c debugging while-loop fgets

我正在使用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 +模式。 我认为在阅读模式下关闭和打开更安全。

3 个答案:

答案 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");

文件打开模式

  1. w - 写(如果存在则删除文件)
  2. r - 读取(文件必须存在)
  3. a - 追加
  4. 比你有fp2 = fopen("intermediate.asm", "r"); 符号意味着:

    1. w + - 写入和读取(如果文件存在则覆盖)
    2. r + - 读写(文件必须存在)
    3. a + - 追加和读取(创建文件,如果它不存在)

答案 1 :(得分:0)

fp2以写入模式“w”打开,所以它必须关闭然后以读取模式“r”打开,这样才能正确读取行,人们可以发现它而不是说它的while(!feof(fp2)) 。)




答案 2 :(得分:-1)

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