Allora io scritto la seguente funzione per leggere un file di testo riga per riga e mettere ciacuna riga in un array dinamico:
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;
}
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).
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;
}