В задании для колледжа было предложено использовать функцию C readline
в упражнении. Я искал его ссылку, но до сих пор не нашел его. Это действительно существует? В каком заголовке? Не могли бы вы отправить ссылку на ссылку?
C функция чтения
Ответ 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() вместо этого, например, предлагаемые сердитые комментарии.