Se è agevole, posta tutto il programma, possibilmente fornendo anche il contenuto di un file di prova.
Nel frattempo, questo è un esempio funzionante di qualcosa di simile.
* ometto, per semplicità, il controllo di tutti gli errori possibili;
* il passaggio del puntatore triplo alla funzione wrapper() può ovviamente essere "propagato" alla funzione allocate() senza che questa debba necessariamente restituire il valore di un puntatore dichiarato localmente
codice:#include <stdio.h> #include <stdlib.h> #define STRLEN 20 char **allocate(int num) { char **m = NULL; int i; m = malloc(sizeof(char *) * num); for (i = 0; i < num; i++) { m[i] = malloc(sizeof(char) * STRLEN); } return m; } int wrapper(char ***m) { int num = 10, i; *m = allocate(num); for (i = 0; i < num; i++) { printf("insert string number %d\n", i+1); fgets((*m)[i], STRLEN, stdin); } return num; } int main(void) { char **m = NULL; int num, i; num = wrapper(&m); puts("*** strings ***"); for (i = 0; i < num; i++) { puts(m[i]); } for (i = 0; i < num; i++) { free(m[i]); } free(m); return 0; }

Rispondi quotando