gpt4 book ai didi

C如何判断一个char**占用多少内存

转载 作者:太空宇宙 更新时间:2023-11-04 08:01:27 25 4
gpt4 key购买 nike

下面的代码将文件名作为 char** 存储在目录中 - 称为 files。最后,我需要将所有这些文件名存储在一个 char* 中。所以我认为我在逻辑上需要做的第一件事是找出这些字符串数组占用多少内存,然后分配一个这个大小的char*。我不太熟悉从堆技术分配。如何确定 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]);
}
}

最佳答案

没有可移植的方法来获取由 malloced 指针指向的内存区域所需的大小。

您需要明确地管理和跟踪这些尺寸。一种可能的方法是让一些 struct 包含它们(或者在别处保持那个大小,或者重新计算它)。你甚至可以用 flexible array member 结束 struct .

在所有情况下,您都需要约定。更好地明确它们,至少在评论中。

顺便说一句,callocmalloc可能会失败(通过返回 NULL)。你总是应该检查一下。

关于C如何判断一个char**占用多少内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46426447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com