当我处于无限循环时,我如何使用malloc

时间:2018-05-22 00:02:03

标签: c malloc

我有一个程序,它反复要求用户输入一行并将它们存储在一个数组中。 我知道如果我可以在运行时获得许多项目来使用动态内存分配来创建数组。 例如

char **array = (char**)malloc(numberOfItems * sizeof(char*));

但在我的情况下,我在运行时不知道numberOfItems,因为我在while循环中得到输入,可以通过ctrl + D终止。

while(!feof(stdin)
{
    array[i] = (char*)malloc(167 * sizeof(char));
}

请帮忙。

1 个答案:

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

一些相关的说明:

希望这足以让你入门!