Ciao,
ecco il codice funzionante. Il problema era il seguente: nella funzione creaArray tu vai a modificare il puntatore a string, quindi devi passare un puntatore a puntatore a string. Le altre modifiche vengono di conseguenza.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef char string[20];
void stampa(string *a, int n){
int i;
for(i=0; i < n; i++)
printf("%s\n", a[i]);
printf("\n");
}
void creaArray(string **a, int n){
int i;
*a = malloc(n * sizeof(string));
for(i=0; i < n; i++){
printf("inserire il nome numero %d.\n",i+1);
scanf("%s",(*a)[i]);
}
}
int main(void){
string *a = NULL;
int n;
printf("inserire n.\n");
scanf("%d", &n);
creaArray(&a, n);
stampa(a, n);
free(a);
return 0;
}
Ciao.