fgets()不保存c中的第一行

fgets() not saving the first line in c

我试图在加载时从文件中删除一行。

在 data_f 中打印数据工作正常,但是当我使用 fseek 将指针移动到文件开头并扫描一行时,它会扫描最后一行并存储在 s 中。

#include<stdio.h>
#include<stdlib.h>
int main(int argc, char **argv)
{
    FILE *fp1 = fopen("data_f", "w");
    FILE *fp = fopen(argv[1], "r");
    char s[100];
    int c=1, chk = atoi(argv[2]);

    while(fgets(s, 100, fp))  //counting number of lines
    {
        if(c != chk)
            fputs(s, fp1);
        c++;
    }
    fseek(fp1, 0, SEEK_SET);
    fgets(s, 100, fp1);
    printf("%s\n", s); 
}

我原以为 fgets 会存储 data_f 的第一行,但它会存储最后一行,为什么?

您正在尝试读取以只写模式打开的文件。

FILE *fp1 = fopen("data_f", "w");
.
.  
.
fgets(s, 100, fp1);

以"w+"模式打开文件以允许读写。

您可以在此处阅读有关 fopen(3) 的更多信息:https://linux.die.net/man/3/fopen