Wie zu verwenden fgets() und store jede Zeile einer Datei mit einem array von char-Zeigern?
Schrieb ich das Programm unten, um die zu Lesen jeder Zeile der Datei, und speichern Sie dann jede Zeile in ein array von char-Zeiger für die spätere Verwendung (wie Sortierung nur die Zeiger, nicht die wirkliche strings). Aber das problem ist, dass es hält die Speicherung der gleichen Linie.
Können sagen, dass die Datei aufgerufen file.txt und hat zwei(2) Zeilen mit text.
first sentence
second sentence
Den code, den ich schrieb, ist die folgende:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <unistd.h>
int main(){
FILE *cf;
cf = fopen("file.txt", "r");
char line[101];
char *lines[2];
char *eof;
int i=0;
while((eof = fgets(line, 101, cf)) != NULL){
lines[i] = eof;
i++;
}
printf("%s\n", lines[0]);
printf("%s\n", lines[1]);
system("pause");
return 0;
}
Die Ausgabe die ich bekomme, ist:
second sentence
second sentence
Aber ich will:
first sentence
second sentence
Was mache ich hier falsch?
Dank für deine Hilfe 🙂
InformationsquelleAutor limitcracker | 2011-10-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Funktion
fgets
nicht neuen Speicher. So im Falle des Erfolgseof == line
- das ist richtig, es gibt, was Sie übergeben. Du überschreibst jedes mal.Versuchen:
Natürlich müssen Sie daran denken
free(lines[i])
.InformationsquelleAutor cnicutar
InformationsquelleAutor Priyesh
Sollten Sie verwenden
getline(3)
, z.B.und Sie sollten überlegen, readline(3) und die GNU readline Bibliothek (GPL lizenziert) für die interaktive Nutzung.
InformationsquelleAutor Basile Starynkevitch