codice:
#include <stdio.h>
#include <stdlib.h>

#define STRING_SIZE 128
#define NUMBER_OF_STRINGS 5

int main(void) {

	int i, j;
	char str[STRING_SIZE]; 
	
        /* 
                 è un array di NUMBER_OF_STRINGS puntatori a char
                 ma ogni puntatore in questo momento
                 non punta a niente
         */
        char *array[NUMBER_OF_STRINGS];

	for (i=0; i < NUMBER_OF_STRINGS; i++) {

		if((array[i] = malloc(STRING_SIZE * sizeof(char)) == NULL){

				puts("Errore allocazione memoria");
				exit(EXIT_FAILURE);

		}

		printf("inserisci stringa\n");
		scanf("%s", array[i]);

  /* 
          ok l'elemento i-esimo di array è stato posto uguale a str 
          quindi punta a str.
          Ma una stringa non si copia così, prima va allocato lo spazio
          poi vanno usate le funzioni tipo strcpy
  */
	}
 /* i primi 5 elementi di array puntano alla stessa stringa str */
 /* e qundi tutti alla ultima assegnazione */
	for (j=0; j < NUMBER_OF_STRINGS; j++) {

		printf("%d\t%s\n", j, array[j]);
		free(array[j]);

	}

/* questo ci deve essere sempre */
	return 0;

}