Connaître la taille d'un tableau
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 du
Code:
#define LENGTH(x) (sizeof(x) / sizeof(x[0]))
ne fonctionne pas bien.
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)
Code:
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!!!
} |
Des erreurs ne sont pas exclues au passage...