Ciao ragazzi,
sto scrivendo un programmino che riceve da stdin una frase, su cui poi dovrò fare alcune operazioni.
Non conoscendo la lunghezza della stessa, ho proceduto nel seguente modo:
funziona..ma secondo voi è abbastanza 'elegante' così? (sia per quanto riguarda la lettura della stringa che la riallocazione carattere per carattere?)codice:int main(int argc, char *argv[]) { if(argc > 1) { fprintf(stderr, "Usage: %s [<file] [>file]", argv[0]); return(EXIT_FAILURE); } char *p; p=(char*)malloc(sizeof(char)); if(p==NULL) { fprintf(stderr, "Memory allocation error.\n"); return(EXIT_FAILURE); } fprintf(stdout,"Inserire una stringa, quindi digitare ctrl+D:\n"); int i=0; while(feof(stdin) == 0) { p[i]=getchar(); //riallocazione memoria a ogni carattere inserito if(p=(char*)realloc(p, sizeof(char)*(i+1))==NULL) { fprintf(stderr, "Memory reallocation error.\n"); return(EXIT_FAILURE); } i++; } //stampa di prova int j=0; for(j=0; j<i-1; j++) { printf("%c",p[j]); } return EXIT_SUCCESS; }
Avrei preferito al posto di quel feof un qualche controllo che uscisse dal ciclo nel momento in cui l'utente avesse premuto invio,ma non sono riuscita a trovare una soluzione efficace...
grazie

Rispondi quotando