01: // esempio lingering pointer corretto
02: // lingering -> remaining present although waning or gradually dying
03: #include<stdio.h>
04: #include<stdlib.h>
05: 
06: 
07: // questa funzione crea solo l'array leggendo da tastiera
08: char *readline(void)
09: {
10:   char c, tmp[1000]; // sto largo...
11:   int i=0;
12:   do
13:   {
14:     scanf("%c", &c); // leggo carattere per carattere
15:     tmp[i] = c;
16:     ++i;
17:   }
18:   while(c != '\n');
19: 
20:   char *nbuffer = malloc(i*sizeof(char)); // alloco nuovo buffer e lo dimensiono in base al numero di caratteri letti
21:   while(i>=0)
22:   {
23:     --i;
24:     nbuffer[i] = tmp[i];
25:   }
26:   
27:   return nbuffer; // nbuffer viene effettivamente distrutto, tuttavia il suo contenuto viene restituito e sopratutto cio' che avevo allocato con malloc() rimane
28: }
29: 
30: 
31: int main(int argc, char **argv){
32: 
33:   printf("Inserisci una frase: ");
34:   char *frase=readline();
35:   int i = 0;
36:   printf("Hai inserito: ");
37:   do
38:   {
39:     printf("%c", frase[i++]);
40:   }while(frase[i] != '\n');
41: 
42:   printf("\n");
43: 
44:   free(frase);
45:     
46:   return 0;
47: }
48: 
49: 


Se avete commenti o osservaƶioni su questa pagina
mandate un messaggio di posta elettronica a bertoƶƶi@ce.unipr.it