/* Scrivere un programma che si pone l'obiettivo di leggere e poi memorizzare una serie di stringhe (non si sa quante) di lunghezza variabile, senza occupare memoria oltre quella necessaria. Il programma acquisisce da input, all'inizio, il numero di stringhe che si vogliono memorizzare (0 se nessuna), e dovrà effettuare poi la memorizzazione solo di quelle richieste. Il programma inoltre, prima di acquisire da input ogni stringa, acquisirà, sempre da input, la lunghezza della stringa che segue, che deve essere comprensiva di terminatore. Se la stringa fornita è più lunga di quanto dichiarato, i caratteri in eccesso non devono essere memorizzati. Per uscire si digiterà 0 alla richiesta della lunghezza. L’input del programma sarà quindi del tipo: … Si chiede di stampare alla fine del programma tutte e sole le stringhe memorizzate, prima di liberare la memoria. Non si può usare la funzione realloc(), né si possono utilizzare variabili con allocazione non fissa, ad esempio: { ; char Stringa[n]; } Sarà ulteriormente (e di molto) valutata la stesura dello stesso programma senza che si sappia da input il numero di stringhe da memorizzare. In questo, e solo in questo, caso è ammessa la realloc(). */ #include #include #include int main () { int i, y, str_len, x, n; char *array, *mychar, c; printf("Quante stringhe vuoi leggere :"); scanf("%d", &i); array=(char *)malloc(sizeof(char *)*i); for (y = 0; y < i; y++) { printf("Inserisci la lunghezza della stringa : "); scanf("%d", &str_len); /* Se la stringa fornita è più lunga di quanto dichiarato, i caratteri in eccesso non devono essere memorizzati. come cazzo faccio? */ x = 0; mychar =(char *)malloc(sizeof(char)*str_len); getchar(); printf("Inserisci la stringa : ", str_len); while ( ((c = getchar()) != '\n' ) && (x < str_len)) { mychar[x] = c; x++; } mychar[x]='\0'; array[y]=malloc(sizeof(char)*str_len); strcpy(&array[y], mychar); } //stampo le stringhe salvate for (y = 0; y < i; y++) printf("La string %d `e : %s", (y+1), array[y]); getch(); return 0; }