1 c arrays string malloc pointers
对于我的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]);
}
Run Code Online (Sandbox Code Playgroud)
我很确定我正在处理错误的内存分配,但我可能错了.在此之前的所有代码似乎都工作得很好.
提前致谢!:)
编辑:这可能重要,也可能不重要,但在main函数中,char***数组实际上是一个char**数组,但在使用该函数时,它输入为&array,使其成为char***.
您不想修改,array因为它指向调用函数中的变量.相反,你想取消引用array并为一个指针数组分配malloc'ed内存.
假设你num在文件中有行.首先创建一个指针数组:
*array = malloc(num * sizeof(char *)); // Don't cast the return value of malloc
Run Code Online (Sandbox Code Playgroud)
然后为每一行,为该行分配空间:
for (i=0; i<num; i++) {
char line[250];
// read the line into "line"
(*array)[i] = strdup(line); // Note the parenthesis
}
Run Code Online (Sandbox Code Playgroud)
如果您想使用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);
}
Run Code Online (Sandbox Code Playgroud)