以下のコードでは、ファイル名をchar**
というディレクトリに格納しています(files
)。最終的には、私はこれらのファイル名のすべてをただ一つのchar*
に保存する必要があります。だから私が論理的に必要と考えるのは、これらの文字列がどのくらいのメモリを占有しているのかを調べてから、このサイズのchar*
を割り当てることです。私は、ヒープ技法からの割り当てに慣れていません。 char**
がどのくらいのメモリを占有しているかを判断するにはどうすればよいですか?C char **が占めるメモリの量を決定する方法
#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]);
}
}
malloc()は既知のバイト数なので、それを追跡しないでください。あなたが* ALL *要素を0に初期化したいと確信していないか、本当に**あなたがしていることを知っていない限り、 'calloc()'を使用してください。 –