C 将静态数组更改为动态数组,且更改最少?
我有一个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,以此类推 这个很好用。但是,现在要求我更加灵活,让用户指定字符串的数量作为参数 如何在对代码进行最小更改的情况下做到这一点
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++编译器,但已经更改。