Как динамически распределять память для каждого символа при наборе до EOF - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть эта функция для чтения строк от стандартного ввода до EOF (CTRL + D), функция работает хорошо. Я хочу выделить память для каждого символа при наборе текста, длина входной строки неизвестна, пока мы не отправим сигнал EOF в ОС.

ПРИМЕЧАНИЕ. Мы можем использовать только функции C

int read_lines_from_stdin(char *s)
{
    char ch;
    int n = 0;
    while((ch = getchar()) != EOF)
    {
        s[n] = ch;
        n++;
    }
    return n;
}

1 Ответ

0 голосов
/ 07 ноября 2019

Вы можете ввести строку, как показано ниже:

char *s = NULL;
size_t s_size;

getdelim(&s, &s_size, EOF, stdin);

В конечном счете, память выделяется для каждого символа в s, и вы можете рассматривать ее как одну строку или несколько символов.

getdelim(3), будет вводить до тех пор, пока не встретится EOF, и будет обрабатывать выделение памяти для вас внутри, как мы снабдили его NULL (прочитайте связанную страницу man). Вы можете узнать количество символов, введенных с помощью s_size.

PS: добавьте обработку ошибок в соответствии с вашими потребностями.

...