我需要在运行时创建字符数组,因为问题输入如下:
1。第一行包含N个字符串数。
2。接下来的N行每行包含一个字符串。
我尝试创建二维数组,但它没有用。
int main() {
int n,count;
scanf("%d",&n);
for(int i=0; i<n; i++){
char* arr[i]= char*(malloc(sizeof(char)));
}
return 0;
}
答案 0 :(得分:3)
做这样的事情:
#define STRINGSIZE 30;
int main() {
int n,count;
scanf("%d",&n);
char **arr;
arr = malloc(sizeof(char*) * n);
for(int i=0; i<n; i++){
arr[i]= malloc(sizeof(char) * STRINGSIZE);
}
return 0;
}
说明:
在C中,您有指向访问数组的指针。对于具有可变长度的多维数组,其常见的是指向指针的指针。所以char **arr; arr = malloc(sizeof(char*) * n);
意味着你正在创建一个指向char的指针数组。然后你需要为每个指针调用malloc
来为每个字符串分配内存。
当然,您不需要为字符串大小使用常量。您可以改为使用变量,并且可以为每个字符串使用不同的大小。
注意:
如果您想要将数组更改为int数组,以避免将来出现问题,请执行此操作,您不必担心更改更多位置:
char **arr;
arr = malloc((sizeof a[0]) * n);
for(int i=0; i<n; i++){
arr[i]= malloc((sizeof a[0][0]) * STRINGSIZE);
}
正如kkk在评论中指出的那样。检查返回值。
arr = malloc(sizeof(char*) * n);
if (NULL == arr) {
perror("Could not allocate memory");
exit(EXIT_FAILURE);
}