对于我的C编程类,我们必须编写一个void函数,它具有file,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 **数组,但在使用该函数时,它输入为&amp; array,使其成为char * **。
答案 0 :(得分:5)
您不想修改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
指向{{1}的地址}}:
array2