Le code ci-dessous stocke les noms de fichiers dans un répertoire char**
- appelé files
. En fin de compte, j'ai besoin de stocker tous ces noms de fichiers dans un seul char*
. Donc, la première chose que je pense que je dois logiquement faire est de trouver combien de mémoire occupe ce tableau de chaînes et d'allouer ensuite un char*
de cette taille. Je ne suis pas très familier avec l'attribution des techniques de tas. Comment peut-on déterminer la quantité de mémoire occupée par un char**
?C comment déterminer combien de mémoire un char ** occupe
#include <string.h>
#include <stdio.h>
#include <dirent.h>
#include <malloc.h>
size_t file_list(const char *path, char ***ls) {
size_t count = 0;
size_t length = 0;
DIR *dp = NULL;
struct dirent *ep = NULL;
dp = opendir(path);
if(NULL == dp) {
fprintf(stderr, "no such directory: '%s'", path);
return 0;
}
*ls = NULL;
ep = readdir(dp);
while(NULL != ep){
count++;
ep = readdir(dp);
}
rewinddir(dp);
*ls = calloc(count, sizeof(char *));
count = 0;
ep = readdir(dp);
while(NULL != ep){
(*ls)[count++] = strdup(ep->d_name);
ep = readdir(dp);
}
closedir(dp);
return count;
}
int main(int argc, char **argv) {
char **files;
size_t count;
int i;
count = file_list("/home/rgerganov", &files);
for (i = 0; i < count; i++) {
printf("%s\n", files[i]);
}
}
Vous 'malloc()' un nombre d'octets connu, alors pourquoi ne pas le garder en mémoire? utilisez 'calloc()' sauf si vous êtes sûr à 100% que vous voulez initialiser * TOUS * les éléments à 0 ou, ** vous ** savez vraiment ce que vous faites. –