c - 将已知大小的二维数组转换为使用 malloc 代替 C 中函数的数组的步骤是什么?

标签 c

该程序很长,所以我无法真正发布所有内容,因此我提供了希望也与其他人相关的删节版本。

现在程序在 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/

相关文章:

c - 在 C 中使用 fscanf 时遇到问题

c - 为什么 realloc 因临时指针而失败

c - 如何在 C 中从八进制 ISO-8859-1 转储 utf8

c++ - 我们应该使用 poll() 还是 select()?

c - 段错误: 11 Mpi Mac OS

c++ - sqlite3 将数据转换为短数组

c - 如何枚举 USB 设备*和*读取/写入它们?

c - 获取参数的问题并在 C 中的 fopen() 中使用它

mysql - 一段时间后功能失效

C 函数不起作用