我正在学习 C 并尝试编写一个函数来创建一个字符串数组。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void parse(char ***aoa)
{
char *string = calloc(9, sizeof(char)); //create a string of size 8+1
strcpy(string, "hi world"); // put text in that array
char **array = calloc(10, sizeof(char *)); //create an array of strings
aoa = calloc(10, sizeof(char *)); //create and array of arrays
aoa[0] = array; //assign string array to the 0th elements of new array
array[0] = string; //assign our string to 0th element of string carry
printf("%s\n", aoa[0][0]); //print 0th element of 0th array.
}
int main()
{
char ***array = NULL;
parse(array);
printf("%s\n", array[0][0]);
return 1;
}
aoa(数组的数组)在堆上,因此两种方法应该相同。它确实在解析函数中打印了“hi world”,但在 main 中给出了 Segmentation Fault,我的代码有什么问题?
显然我需要 free() 一切并进行错误检查,但我删除它以显示问题的要点
最佳答案
你在parse()
中为一个局部变量保留了空间,你需要从main
传递一个指向array
的指针,然后在里面解引用函数:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void parse(char ****aoa)
{
char *string = calloc(9, sizeof(char)); //create a string of size 8+1
strcpy(string, "hi world"); // put text in that array
char **array = calloc(10, sizeof(char *)); //create an array of strings
*aoa = calloc(10, sizeof(char *)); //create and array of arrays
*(aoa[0]) = array; //assign string array to the 0th elements of new array
array[0] = string; //assign our string to 0th element of string carry
printf("%s\n", *(aoa[0][0])); //print 0th element of 0th array.
}
int main()
{
char ***array = NULL;
parse(&array);
printf("%s\n", array[0][0]);
return 1;
}
关于c - 堆上的多维数组 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35310798/