C функция чтения

В задании для колледжа было предложено использовать функцию C readline в упражнении. Я искал его ссылку, но до сих пор не нашел его. Это действительно существует? В каком заголовке? Не могли бы вы отправить ссылку на ссылку?

Ответы

Ответ 1

Readline существует в двух местах: libreadline и libedit (также называемый libeditline). Оба имеют идентичный интерфейс. Разница заключается в том, что libreadline лицензируется под лицензией GPL, libedit - это предложение 3 BSD. Лицензирование действительно не является проблемой для задания, по крайней мере, я не думаю, что это так. Любая лицензия позволяет свободно использовать код. Если вы ссылаетесь на readline, обязательно создайте всю программу GPL 2 or later, которая будет удовлетворять любой версии GPL, управляющей системой readline. Это может быть GPL2 + или GPL3 +, в зависимости от возраста системы. Я не защищаю ни одну лицензию, что до вас.

Обратите внимание, позаботьтесь о том, чтобы установить/или или отрегулировать привязку по мере необходимости (-lreadline или -ledit или -leditline). Оба являются библиотеками, а не частью стандартной библиотеки C.

Изменить (afterthought):

Если вы выпустили программу в wild, ее хороший жест, позволяющий пользователю настроить его с помощью readline по выбору. Например: --with-readline или --with-libedit и т.д. Это позволяет бинарный пакет, соответствующий их выбору лицензии, по крайней мере до readline.

Ссылки: Readline и Edit/Editline,

Ответ 2

Я не считаю это стандартной функцией.

Простая реализация была бы такой:

char *Readline(char *in) {
   char *cptr;

   if (cptr = fgets(in, MAX_LINE, stdin)) {
     /* kill preceding whitespace but leave \n so we're guaranteed to have something
     while(*cptr == ' ' || *cptr == '\t') {
       cptr++;
     }
     return cptr;    
    } else {
     return 0;
   }
 }

Он использует fgets() для чтения до MAX_LINE - 1 символ в буфер 'in'. Он удаляет предыдущие пробелы и возвращает указатель на первый символ без пробелов.

Ответ 3

Он не существует.

Они ошибались и ссылались на gets() из stdio.h.

Кроме того, это очень небезопасная функция из-за отсутствия максимального размера для чтения параметра, что делает его немедленной защитой целиком (перенаправление переполнения буфера поиска). Вы можете использовать fgets() вместо этого, например, предлагаемые сердитые комментарии.