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;
}