将静态数组更改为动态数组,只需更改很少?

时间:2012-03-08 22:49:33

标签: c malloc

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

char* arr[100];

我使用此数组中的每个元素指向由另一个函数计算的某个字符串。所以基本上arr [0]会指向string1,arr [1]指向string2等等。

这很好用。但是,现在我要求用户指定字符串数作为参数,以便更灵活。

如何在对代码进行最少更改的情况下执行此操作?我知道我需要使用malloc。但是我在之前的所有赋值语句中都收到了很多警告。我更改了数组的声明如下:

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

我在这里遗漏了什么吗?

4 个答案:

答案 0 :(得分:10)

如果您要创建char *数组,则需要char **arr。可以将其视为char *的数组 - 如果您有一个int数组,那么您将拥有int *。由于您有一个char *s数组,因此需要char **

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

答案 1 :(得分:2)

您将arr声明为char的指针:单个字符串,或者,如果您愿意,还可以是char的数组。

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

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

顺便说一下,删除广告:在C中为unnecessary。另请参阅Question 7.7中的comp.lang.c FAQ

答案 2 :(得分:1)

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

答案 3 :(得分:1)

不要忘记字符串也是一个数组(char *),所以你需要一个指针数组,它应该是这样的:

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