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:
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;
}
funziona..ma secondo voi è abbastanza 'elegante' così? (sia per quanto riguarda la lettura della stringa che la riallocazione carattere per carattere?)
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