我试图编写一个反转文件行的代码,如下所示:
原始档案:
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;
}
答案 0 :(得分:3)
当你这样做时
linhas[flag] = linha;
你使linhas
中的所有指针指向完全相同的位置。因此,在读取循环中,您读取的所有行都将覆盖linhas[flag]
之前单个缓冲区指针中的内容。
有两种可能的解决方案:
使用数组数组,例如
char linhas[100][500];
动态分配linhas
中的每个条目:
for(flag =0;flag < 100;flag++)
linhas[flag] = malloc(500);