我有一个程序,它反复要求用户输入一行并将它们存储在一个数组中。 我知道如果我可以在运行时获得许多项目来使用动态内存分配来创建数组。 例如
char **array = (char**)malloc(numberOfItems * sizeof(char*));
但在我的情况下,我在运行时不知道numberOfItems,因为我在while循环中得到输入,可以通过ctrl + D终止。
while(!feof(stdin)
{
array[i] = (char*)malloc(167 * sizeof(char));
}
请帮忙。
答案 0 :(得分:1)
您可以使用realloc()
来增加通过malloc()
,calloc()
或realloc()
获得的内存大小。
int capacity = 10;
char **array = malloc(capacity* sizeof(char*));
int i = 0;
char line[256];
while(fgets(line, sizeof(line), stdin)) {
// Resize array when at capacity
if (i == capacity) {
capacity *= 2;
array = realloc(array, capacity * sizeof(char*));
}
array[i] = malloc(167 * sizeof(char));
i++;
}
一些相关的说明:
每次增加容器时,容器的大小加倍,比增长量恒定。 Read more here
希望这足以让你入门!