c - 当我处于无限 while 循环中时如何使用 malloc

标签 c malloc

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

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

一些相关注释:

希望这足以让您开始!

关于c - 当我处于无限 while 循环中时如何使用 malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50458015/

相关文章:

c - 如何在 C 中管理动态字符串数组

c - 分配 3 维数组

macos - Valgrind 支持 Mac OS 10.8 吗?

php - 将 PHP 用于守护进程是否明智?

linux - linux 读/写系统调用是否使用动态内存分配?

c - 高效地乘以 7

c - 将值从文本文件传递到数组

c - char* 数组以及如何为每个数组分配内存

c - 如何用C语言打印链表?

C 帮助 : Compiler gives me a "makes pointer from integer without cast" when using strlen()