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 : Sélectionner tout - Visualiser dans une fenêtre à part
#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 : 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!!!
}
Des erreurs ne sont pas exclues au passage...