C 将静态数组更改为动态数组,且更改最少?

C 将静态数组更改为动态数组,且更改最少?,c,malloc,C,Malloc,我有一个C代码,它创建了一个字符指针数组,如下所示: char* arr[100]; char* arr = (char*)malloc(n * sizeof(char*)); //where n is provided by user 我使用这个数组中的每个元素指向另一个函数正在计算的字符串。所以基本上,arr[0]将指向string1,arr[1]指向string2,以此类推 这个很好用。但是,现在要求我更加灵活,让用户指定字符串的数量作为参数 如何在对代码进行最小更改的情况下做到这一点

我有一个C代码,它创建了一个字符指针数组,如下所示:

char* arr[100];
char* arr = (char*)malloc(n * sizeof(char*)); //where n is provided by user
我使用这个数组中的每个元素指向另一个函数正在计算的字符串。所以基本上,arr[0]将指向string1,arr[1]指向string2,以此类推

这个很好用。但是,现在要求我更加灵活,让用户指定字符串的数量作为参数

如何在对代码进行最小更改的情况下做到这一点?我知道我需要使用malloc。然而,我在之前的所有作业陈述中都得到了很多警告。我将数组的声明更改如下:

char* arr[100];
char* arr = (char*)malloc(n * sizeof(char*)); //where n is provided by user
我想我只需要更改声明。现在所有赋值语句都发出警告(“赋值从指针生成整数而不进行强制转换”)。以下是赋值语句的示例:

arr[i] = str; //where str is defined as char* and is calculated by another function

我是不是遗漏了什么

如果要创建
char*
数组,则需要
char**arr
。把它想象成一个
char*
数组——如果你有一个
int
数组,你就会有
int*
。由于您有一个
char*s
数组,因此需要
char**

char** arr = malloc(n * sizeof(char*));

您希望将
arr
声明为
char**
,因为您指向的是一个指针数组。如果您仅将
arr
声明为
char*
(不是
char**
char*[]
),则您只有一个“字符串”。

您将
arr
声明为指向
char
的指针:可以是单个字符串,也可以是
char
的数组

要分配指针数组,请将
arr
声明为

char **arr = malloc(n * sizeof(char *));
顺便说一句,删除该类型:它是C。另请参见。

不要忘记字符串也是一个数组(
char*
),因此您需要指针数组,它应该如下所示:

char** arr = (char**)malloc(n * sizeof(char*));

请把石膏去掉。在C中,当将<代码> Value*/Cux>转换为另一个指针时,不需要强制转换。虽然我不确定OP是否使用C或C++编译器,但已经更改。