как использовать malloc, когда я в бесконечном цикле - PullRequest
0 голосов
/ 22 мая 2018

У меня есть программа, которая неоднократно запрашивает ввод пользователем строки и сохраняет их в массиве.Я знаю, как использовать динамическое выделение памяти для создания массива, если я могу получить несколько элементов для хранения во время выполнения.например

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

, но в моем случае я не знаю numberOfItems во время выполнения, потому что я получаю входные данные в цикле while, который может быть прерван нажатием ctrl + D.

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

Любая помощь, пожалуйста.

1 Ответ

0 голосов
/ 22 мая 2018

Вы можете использовать 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++;
}

Несколько связанных заметок:

Надеюсь, этого достаточно, чтобы начать работу!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...