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