В задании для колледжа было предложено использовать функцию 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() вместо этого, например, предлагаемые сердитые комментарии.