PDA

Visualizza la versione completa : [C] Lettura stringhe


cicciobaliccio
11-02-2005, 23:54
Come faccio a leggere una stringa di lunghezza arbitraria data in input? Usando puntatore e calloc o malloc...

Alethesnake
12-02-2005, 00:56
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)

cicciobaliccio
12-02-2005, 11:24
non c''e un codice gią fatto?tipo un'estensione di gets()

Alethesnake
12-02-2005, 13:22
ti posto quella che mi son scritto io:


/*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;
}

:ciauz:

cicciobaliccio
12-02-2005, 20:49
ma alla funzione non gli apsso niente come parametro?
tipo un char *input(char *)
no?

netarrow
12-02-2005, 22:05
Originariamente inviato da cicciobaliccio
ma alla funzione non gli apsso niente come parametro?
tipo un char *input(char *)
no?

ma a vedere il sorgente postato direi di no...

basta che fai



...
char* stringa = input();
...


:ciauz:

Loading