C语言反向读文件的意外输出

Unexpected output for reverse file reading in C language

这是我的代码,但我不知道为什么它只打印部分行。 这是我的代码:

#include<stdio.h>
#include<sys/types.h>
#include<fcntl.h>

int main(int argc,char *argv[])
{
    FILE *fpr,*fpw;
    int cnt=0;
    fpw=fopen(argv[2],"w+");
    char buff[1000];
    while((fpr=fopen(argv[1],"r"))==NULL)
    {
        printf("\nCan't open file %s\n",argv[1]);
        scanf("re-enter file name:%s\n",argv[1]);
    }
    
    while (!feof(fpr))
    {
        
        fgets(buff,2,fpr);

        if(buff[0]=='\n')
        {
            putc(buff[0],fpw);
            fseek(fpw,0,SEEK_SET);
        
        }
        fputs(buff,fpw);
        cnt++;
    }

    
    fclose(fpr);
    fclose(fpw);
    
}

输入文件:

Hrey yhis 将打印两次

打印三次

@为什么不

输出文件

打印三次 @为什么不

所以..基本上我想做的事情实际上是不可能使用 lseek/fseek。所以我找到了另一种方法,如下代码所示:

#include <stdio.h> 
#include <string.h> 
#include<stdlib.h>

int main(int argc,char *argv[])
{

    FILE* fr;
    FILE* fw;
    int l=0;
    char lines[10000][100];
    if( ( (fr=fopen(argv[1],"r+"))==NULL || (fw=fopen(argv[2],"w+"))==NULL )  )
    {
        printf("Error reading or opening files %s,%s",argv[1],argv[2]);
    }

    while(fgets(lines[l++], sizeof(lines[l]), fr)!=NULL);
        

    while(l>=0)
        fputs(lines[l--],fw);
        

    fclose(fr);
    fclose(fw);
}