01: // funzione realloc()
02:
03: // voglio memorizzare caratteri inseriti da tastiera
04: // MA non ne so a priori il numero, lo capiro' solo quando incontro il carattere di invio
05: #include<stdio.h>
06: #include<stdlib.h>
07:
08: int main(int argc, char **argv){
09:
10:
11: printf("Inserisci una frase:\n");
12:
13: char c; // lo uso per leggere i caratteri
14: char *frase = NULL; // array di char che conterra' la frase
15: int fraselen = 0; // lunghezza della frase, man mano leggo la incremento
16: int i = 0; // indice che mi servira' per tener traccia dell'ultimo elemento letto XXX lo uso per semplicita' in realta' bastava fraselen
17:
18: do
19: {
20: scanf("%c", &c); // leggo un carattere
21:
22: ++fraselen; // aggiorno lunghezza di quanto letto
23:
24: frase = realloc(frase, sizeof(char) * fraselen); // allargo (o nel caso della prima volta lo creo) il buffer che serve a contenere quanto letto
25: // FIXME qui ci vorrebbe un controllo, omettiamo per semplicita'
26:
27: frase[i] = c; // memorizzo in array il carattere letto
28: ++i; // aggiorno indice
29:
30: // potevo evitare di usare la variabile i e usare fraselen (di fatto partono tutte
31: // e due da 0 e vengono incrementate ad ogni ciclo) facendo cosi':
32: // frase[fraselen - 1] = c;
33:
34: }
35: while(c != '\n'); // esco quando incontro l'invio (che comunque ho memorizzato lo stesso)
36:
37:
38: printf("I caratteri letti sono: ");
39: for(i = 0; i < fraselen; ++i)
40: printf("[%c]", frase[i]);
41: printf("\n");
42:
43: free(frase);
44:
45: return 0;
46: }
47:
48: // SPOILER: la lettura di sequenze di caratteri da tastiera e' in realta' molto piu' semplice
49:
Se avete commenti o osservaƶioni su questa pagina
mandate un messaggio di posta elettronica a bertoƶƶi@ce.unipr.it
mandate un messaggio di posta elettronica a bertoƶƶi@ce.unipr.it