我有一个程序,反复要求用户输入一行并将它们存储在一个数组中。 如果我可以在运行时存储多个项目,我知道如何使用动态内存分配来创建数组。 例如
char **array = (char**)malloc(numberOfItems * sizeof(char*));
但就我而言,我在运行时不知道 numberOfItems,因为我在 while 循环内获取输入,可以通过 ctrl+D 终止该循环。
while(!feof(stdin)
{
array[i] = (char*)malloc(167 * sizeof(char));
}
请帮忙。
最佳答案
您可以使用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 .
希望这足以让您开始!
关于c - 当我处于无限 while 循环中时如何使用 malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50458015/