我有一个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
我在这里遗漏了什么吗?
答案 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*));