gpt4 book ai didi

c - 指向动态二维字符数组的三重指针的内存分配

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

对于我的 C 编程课,我们必须编写一个 void 函数,该函数将文件、char*** 数组和 int* 变量作为输入。我们应该遍历文件,确定行数并将其存储在 int* 变量中,然后将每一行复制到 char*** 数组中的相应行中。

我设法将文件中的每一行复制到一个 char** 数组中,现在我需要让 char*** 数组指向这个 char** 数组。不幸的是,我在这部分遇到了麻烦。

如果我尝试显示 char** 数组的行,一切正常。但是,如果我在将它链接到 char** 数组后尝试显示 char*** 数组的行,则会显示第一行,然后出现段错误。

这是最后一部分的代码,其中 array 是 char*** 变量,array2 是 char** 变量,num 是具有文件行数的 int* 变量:

array = (char***)malloc(sizeof(char**));

array = &array2;

for(i = 0; i < num; ++i) {
printf("%s\n", *array[i]);
}

我很确定我处理的内存分配有误,但我也有可能是错的。不过,此时之前的所有代码似乎都可以正常工作。

提前致谢! :)

编辑:这可能重要也可能不重要,但在 main 函数中,char*** 数组实际上是一个 char** 数组,但在使用该函数时,它输入为 &array,使其成为 char*** .

最佳答案

您不想修改 array,因为它指向调用函数中的变量。相反,您想取消引用 array 并将其分配给指针数组的 malloc 内存。

假设文件中有 num 行。首先创建一个指针数组:

*array = malloc(num * sizeof(char *));    // Don't cast the return value of malloc

然后对于每一行,为该行分配空间:

for (i=0; i<num; i++) {
char line[250];
// read the line into "line"
(*array)[i] = strdup(line); // Note the parenthesis
}

如果你想使用 char **array2 使事情看起来更清晰,你想将其值分配给 array 指向的内容而不是使 array 指向array2的地址:

char **array2 = malloc(num * sizeof(char *));
*array = array2;
...
for (i=0; i<num; i++) {
char line[250];
// read the line into "line"
array2[i] = strdup(line);
}

关于c - 指向动态二维字符数组的三重指针的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44297840/

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