• [^] # Re: Réponses

    Posté par . En réponse au message valeur NULL d'un tableau de pointeur. Évalué à 2.

    Moui, c'est pas mal. Juste pour info, malloc et realloc te renvoie un bout de mémoire NON initialisé. Ha, ha, moi aussi étant jeune padawan, je suis tombé souvent dans le piège plus d'une fois. Sinon en plus efficace, tu lit le fichier d'un coup, tu comptes les lignes et assignes à ton tableau du genre :
    char ** get_fortune(void)
    {
    	char ** text;
    	char * content;
    	char * p;
    	FILE * file;
    	int n, sz;
    	file = popen("/usr/games/fortune", "r");
    	if (file == NULL) return NULL;
    	// Lit d'un bloc le fichier
    	fseek(file, 0, SEEK_END);	sz = ftell(file);
    	fseek(file, 0, SEEK_SET);
    	if (sz == 0) return NULL;
    	content = malloc(sz + 1);
    	sz = fread(content, 1, sz, file);
    	content[sz] = 0;
    	fclose(file);
    	// Compte les lignes
    	for (p = content, n = 0; *p; p ++)
    		if (*p == '\n') n ++;
    	// Construit le tableau
    	text = malloc((n + 1) * sizeof *text);
    	for (p = content, n = 0; p; p = strchr(p, '\n'), n ++) {
    		if (p > content) *p++ = 0;
    		text[n] = p;
    	}
    	text[n] = NULL;
    	return text;
    }
    
    Faudra penser à libérer text[0] et text (la valeur de retour). Disclaimeur : pas testé :-(