Come faccio a leggere una stringa di lunghezza arbitraria data in input? Usando puntatore e calloc o malloc...
Come faccio a leggere una stringa di lunghezza arbitraria data in input? Usando puntatore e calloc o malloc...
crei un puntatore p a char
devi leggere ogni carattere digitato uno ad uno con getchar
ogni volta che leggi un carattere fai un realloc della memoria sul puntatore creato per trovare uno spazio in memoria che possa contenere anche questo carattere e quindi accodi il carattere salvato agli altri partendo dal puntatore (qualcosa tipo p[i]=carattereInserito)
xxx
non c''e un codice già fatto?tipo un'estensione di gets()
ti posto quella che mi son scritto io:
codice:/*funzione che gestisce lo storage dinamico in memoria dell'input da tastiera*/ char *input() { int i=0; char *p; char *e="Memoria insufficiente"; char carattere; /* alloco la quantità di memoria necessaria a contenere un tipo di dato char e faccio il casting del risultato (un puntatore a quella zona di memoria) al tipo puntatore di char (char *) */ p = (char *) malloc(sizeof(char)); if (p==NULL) { return e; } p[i++]=getchar(); if (p[0]=='\n') /*Caso in cui viene premuto subito invio*/ { p[0]='\0'; return p; } for(i=1;;i++) { /* rialloco la memoria in modo da averne disponibile tanta quanta ne serve per ospitare (i+1) variabili di tipo char (totale caratteri nell'array) */ p = (char *) realloc (p, (i+1) * sizeof(char)); if (p==NULL) { return e; } carattere=getchar(); if (carattere=='\n') /*esco dal ciclo (termino la stringa) quando l'utente preme invio*/ { p[i]='\0'; break; } else { p[i]=carattere; } } return p; }![]()
xxx
ma alla funzione non gli apsso niente come parametro?
tipo un char *input(char *)
no?
ma a vedere il sorgente postato direi di no...Originariamente inviato da cicciobaliccio
ma alla funzione non gli apsso niente come parametro?
tipo un char *input(char *)
no?
basta che fai
codice:... char* stringa = input(); ...![]()
Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)