Bonjour,
Je cherche à connaître le nombre de cases dans un tableau pour en afficher le contenu. Mon souci, c'est que toutes les "cases" n'ont pas la même taille, puisqu'il s'agit d'un tableau dont le contenu est dynamiquement alloué.
Du coup, la méthode habituelle dune fonctionne pas bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part #define LENGTH(x) (sizeof(x) / sizeof(x[0]))
Suis-je obligé de compter le nombre d'allocations lors de la création du tableau, ou existe-t-il une méthode pour retrouver la taille de ce dernier. La FAQ évoque des méthodes spécifiques.
Le code (il s'agit de lister un répertoire, mettre cette liste dans un tableau et la retourner)
Des erreurs ne sont pas exclues au passage...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 int countdir(const char *path) // return number of files in path { int num = 0; struct dirent *ent = NULL; DIR *d = opendir(path); if (d == NULL) perror("Open dir"); while ((ent = readdir(d)) != NULL) num++; closedir(d); return num; } char ** listdir(const char *path) { struct dirent *ent = NULL; char **dirlist = NULL; int i; DIR *d = opendir(path); if (d == NULL) perror("Open dir"); // Allocate number of files dirlist = malloc(sizeof(char*) * countdir(path)); // Put file names in dirlist rewinddir(d); while ((ent = readdir(d)) != NULL) { // Allocate enough place for filename dirlist[i] = malloc( sizeof(char) * (strlen(ent->d_name)+1) ); strcpy(dirlist[i], ent->d_name); i++; } closedir(d); return dirlist; // free dirlist!!! }
Partager