01: // array di stringhe mediante array di puntatori
02: #include<stdio.h>
03: #include<stdlib.h>
04:
05: #include<string.h>
06:
07: int main(int argc, char **argv){
08:
09: char incipit[] =
10: "Nel mezzo del cammin di nostra vita \
11: mi ritrovai per una selva oscura: \
12: che la diritta via era smarrita. \
13: E quanto a dir qual era e cosa dura \
14: esta selva selvaggia et aspra e forte, \
15: che nel pensier rinova la paura!";
16: char delimitatori[]= " :.,;'!+-";
17: char *word;
18:
19:
20: // un array di puntatori puo' essere usato per memorizzare tante stringhe
21: // devo:
22: // 1. dimensionare il numero massimo di stringhe da gestire
23:
24: char *str_array[100]; // con questo array posso memorizzare fino a 100 stringhe, attenzione che non c'e' limite alla lunghezza di ciascuna stringa (a parte i limiti di memoria) ma devo comunque allocarli
25: int mem_used=sizeof(str_array);
26:
27: int i;
28: word = strtok(incipit, delimitatori);
29: for(i=0; word && i<100; ++i) // mi fermo se finisco con strtok o se raggiungo massimo numero di stringhe
30: {
31: str_array[i] = malloc(sizeof(char) * (strlen(word) + 1)); // alloco spazio necessario in base a quanto devo memorizzare
32: strcpy(str_array[i], word); // man mano che ho una parola la ricopio nella posizione giusta nell'array
33: // strcpy(&str_array[i][0], word); // equivalente alla precedente
34: mem_used += sizeof(char) * (strlen(word) + 1);
35:
36: word = strtok(NULL, delimitatori);
37: }
38:
39: for(int j=1; j<i; ++j)
40: {
41: printf("#%d \t %s\n", j, str_array[j]);
42: free(str_array[j]); // libero memoria visto che non la uso piu'
43: }
44:
45: printf("Per memorizzare le stringhe ho usato %d byte di memoria\n", mem_used);
46:
47: return 0;
48: }
49:
50:
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