fgets只获取我文件的最后一行

时间:2014-07-14 14:23:35

标签: c fgets stdio

我试图编写一个反转文件行的代码,如下所示:

原始档案:

aaa
bbb
ccc

输出文件应为:

ccc
bbb
aaa

但是,实际上输出文件是这样的:

ccc
ccc
ccc

我无法理解为什么。这是我的代码:

#include <stdio.h>
int main(){
    char linha[500];
    char *linhas[100];
    int flag = 0;
    FILE *texto,*invertido;
    // populando o vetor
    for(flag =0;flag < 100;flag++)
        linhas[flag] = linha;

    texto = fopen("texto.txt","r");
    if(texto == NULL)
        return 0;
    rewind(texto);
    for(flag = 0;fgets(linhas[flag],500,texto)!=NULL;flag++);

    flag--;
    invertido = fopen("invertido.txt","w");

    if(invertido == NULL)
        return 0;

    for(;flag >= 0;flag--)
        fprintf(invertido,"%d - %s\n",flag,linhas[flag]);

    fclose(invertido);
    fclose(texto);
    return 0;
}

1 个答案:

答案 0 :(得分:3)

当你这样做时

linhas[flag] = linha;

你使linhas中的所有指针指向完全​​相同的位置。因此,在读取循环中,您读取的所有行都将覆盖linhas[flag]之前单个缓冲区指针中的内容。

有两种可能的解决方案:

  1. 使用数组数组,例如

    char linhas[100][500];
    
  2. 动态分配linhas中的每个条目:

    for(flag =0;flag < 100;flag++)
        linhas[flag] = malloc(500);