在运行时动态创建多个字符数组

时间:2017-10-29 13:57:44

标签: c arrays multidimensional-array

我需要在运行时创建字符数组,因为问题输入如下:

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;
}

1 个答案:

答案 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);
}

此外,do not cast malloc

正如kkk在评论中指出的那样。检查返回值。

arr = malloc(sizeof(char*) * n);
if (NULL == arr) {
    perror("Could not allocate memory");
    exit(EXIT_FAILURE);
}