Allora io scritto la seguente funzione per leggere un file di testo riga per riga e mettere ciacuna riga in un array dinamico:
Il problema è che quando scorro l'array per stamparne i valori a video, la riga finale viene stampata a video più volte(addirittura se nel mio file di testo all'ultima riga segue un ritorno a capo, questa viene stampata 3 volte, altrimenti solo 2).codice:#include <malloc.h> #include <string.h> char** ReadFileLines(FILE *fp) { char line[150]; char** lines=(char**)malloc(sizeof(char*)); int nlines=0; while (!feof(fp)) { fscanf(fp, "%[^\n]", line); fgetc(fp); lines[nlines] = malloc((1 + strlen(line))*sizeof(char)); strcpy(lines[nlines], line); nlines++; lines=(char**)realloc(lines,sizeof(char*)*(nlines+1)); } lines[nlines]=NULL; return lines; }
Ecco come scorro l'array per stamparne i valori:
codice:#include <stdio.h> #include <stdlib.h> #include <malloc.h> # include "filelib.h" int main() { FILE *fp; char** lines; char* line; int i=0; if (!(fp=fopen("/home/utente/nome_file.txt","r"))) { printf("Errore in apertura"); return 1; } lines=ReadFileLines(fp); while((line=lines[i])!=NULL) { printf("%s\n", line); i++; } fclose(fp); return 0; }


Rispondi quotando