该程序很长,所以我无法真正发布所有内容,因此我提供了希望也与其他人相关的删节版本。
现在程序在 main 中使用这个数据结构:
char b[100];
gets(b);
char arr[5][100];
sscanf(b, "%s", arr[0]); //user enters a query in the command line
//initializes statement based on what arr[0] is
//in this case, calls myFunction
我现在想使用 malloc 来制作未知大小的 char 数组,而不是我现在拥有的。网上有一些关于如何使用 malloc 创建 2D 数组的示例,但我不知道我使用的实现类型是否会与我已经创建的遵循此结构的函数混淆:
void myFunction(char *b, char *argv[]) {
char arr[5][100];
sscanf(b, "%s %s", arr[0], arr[1]);
//do stuff to the array like strcpy(arr[0],argv[1]);
// or FILE *f = fopen(arr[0], "r");
}
我是否只需在 main
中初始化 malloc
并在函数中执行相同的操作?我觉得如果我这样做,在函数中使用数组将不再像我已经完成的那样简单,因为我现在正在处理动态内存。
最佳答案
以下是如何分配数组的数组(又名二维数组)并将其地址存储到具有适当类型的指针:
void myFunction(char *b, char *argv[]) {
char (*arr)[100] = malloc(sizeof(*arr) * 5);
sscanf(b, "%99s%99s", arr[0], arr[1]);
//do stuff to the array like strcpy(arr[0], argv[1]);
// or FILE *f = fopen(arr[0], "r");
}
也不要使用gets()
。
关于c - 将已知大小的二维数组转换为使用 malloc 代替 C 中函数的数组的步骤是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45404572/