Заменить:
char *buffer;
с:
char buffer[100];
Измерение согласуется с аргументом read()
, но ваша строка не будет заканчиваться нулем на read()
, поэтому вы можете вместо этого выделить 101 байт и принудительно завершить его нулем. Вам нужно подумать об этом дополнительном байте при распределении пространства.
Обратите внимание, что выделенное пространство не используется.
Вы должны всегда проверять распределение памяти перед использованием.
Поскольку перед циклом вы выделяете только 20 указателей, цикл while (1)
опасен и может позволить вам растоптать намного больше выделенного пространства, если пользователь вводит более 20 строк данных.
(Обратите внимание, что если пользователь перенаправит ввод из файла, вы не будете читать 20 строк; вы будете читать 2000 символов в 20 блоках по 100 символов, новые строки и все, а затем попадать на территорию сбоя.)