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