Il codice che ho usato è questo:
Se mi dite che sbaglio non c'è dubbio, mi fido ciecamente dell'esperienza ( altrimenti non stavo qui a scrivere), ma non riesco a capire dove:codice:#define dim 5 //alloco 5 blocchi di memoria per volta(*allocazioni che viene incrementato ogni 5 inserimenti) struct mail{ char indirizzo[30]; } *email = NULL; int i=-1; int n=0; int allocazioni=1; //coefficiente per incrementare i blocchi da reallocare int alloc=1; //dimensione nuovo blocco char scelta[2]; email=(struct mail*)malloc(dim*sizeof(struct mail)); do { i++; if (i == allocazioni * dim){ //quando i(num mail) diventa uguale ad un multiplo di 5 allocazioni++; //aggiorno il coefficiente alloc=allocazioni*dim; //definisco il nuovo blocco email=(struct mail*)realloc(email, (alloc*sizeof(struct mail ))); //e rialloco la memoria } printf("\nInserisci il %d° indirizzo email: ",i+1); scanf("%s", email[i].indirizzo); printf("\nNuovo indirizzo?: "); scanf("%s", scelta); } while (strcmp(scelta,"s")==0); for (n=0; n<=i; n++) { printf("\nMail nr.%d: %s",n+1,email[n].indirizzo); } free (email);
Ho letto (e spero di aver letto bene) che un vettore di caratteri statico (con il valore di "n" noto) lo dichiaro
char xxx[n];
mentre un vettore di caratteri dinamico lo dichiaro
char *xxx;
perché un vettore di struct dovrebbe essere diverso?
D'altronde il fatto che quando stampo "email[n]" vengono mostrati i valori inseriti, correttamente ed in ordine di inserimento, mi fa supporre che per ogni valore di "n" è stata creata una cella (email[n]) che contiene l'ennesimo dato inserito.
Fatemi capire dove sbaglio altrimenti comincio male

Rispondi quotando