根据输入声明具有大小的二维数组

时间:2015-02-16 14:19:25

标签: c

说,我想要一个最大长度为20的单词数组。我从用户输入中获取要存储的单词数。声明上述数组的内存效率最高的方法是什么?

我可以做这样的事情,但我猜它的内存效率不高?

char wordArray[1000][20];

那就是我希望“1000”根据用户的输入而变化。我不能这样做。

int main()
{
    int size;
    printf("Enter size: ");
    scanf("%d", &size);
    char wordArray[size][20];
}

2 个答案:

答案 0 :(得分:4)

通常堆栈大小很小,您无法在堆栈上分配如此大量的内存。这样做会导致堆栈溢出。你需要动态分配。

int size;
printf("Enter size: ");
scanf("%d", &size);
char **wordArray = malloc(size*sizeof(char *));

for(int i = 0; i < size; i++)
     wordArray[i] = malloc(20);  

致电free取消分配。

但是,请注意,与2D数组的情况不同,这将分配碎片整理的内存而不是连续的。要获得连续的内存分配,可以使用指向数组的指针作为

int (*wordArray)[20] = malloc(size * sizeof(*wordArray));  

并以wordArray[i][j]的形式访问该元素。

有关更详细的说明,请参阅c-faq 16.6: How can I dynamically allocate a multidimensional array?

答案 1 :(得分:2)

不,不是,因为你正在分配100000倍sizeof(char)的内存。不,你不能像在这里写的那样做,因为在编译期间,数组的大小是未知的,因此无法分配空间。您可以使用malloc

执行此操作