В присвоении для колледжа было предложено использовать C readline
функция в осуществлении. Я искал его ссылку, но все еще не нашел его. Это действительно существует? В котором заголовке? Можно ли отправить ссылку на ссылку?
Readline существует в двух местах: libreadline
и libedit
(также называемый libeditline
). Оба имеют идентичный интерфейс. Разница в том, что libreadline находится под лицензией GPL, libedit - это 3 статьи BSD. Лицензирование на самом деле не является проблемой для задания, по крайней мере, я так не думаю. Любая лицензия позволяет вам свободно использовать код. Если вы ссылаетесь на readline, убедитесь, что вся программа GPL 2 или более поздняя
удовлетворяет любой версии GPL, которая управляет системой readline
. Это может быть GPL2 + или GPL3 +, в зависимости от возраста системы. Я не защищаю ни одну лицензию, решать вам.
Обратите внимание: при необходимости установите / или настройте связывание ( -lreadline
или -ledit
или -leditline
). Оба являются библиотеками, а не частью стандартной библиотеки C.
Редактировать (запоздалое):
Если вы выпускаете программу в открытый доступ, это хороший жест, позволяющий пользователю настроить ее с помощью своей строки чтения
по своему выбору. Например: - with-readline
или - with-libedit
и т. Д. Это позволяет использовать двоичный пакет, соответствующий выбранной ими лицензии, по крайней мере, до readline
обеспокоен.
Ссылки: Readline и Edit / Editline .
Я не думаю, что это стандартная функция.
Простая реализация была бы такой:
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'. Он удаляет предшествующие пробелы и возвращает указатель на первый непробельный символ.
Его не существует.
Они ошибались и ссылались на gets () из stdio.h.
Также это очень небезопасная функция из-за отсутствия максимального размера для чтения параметра, что делает ее немедленной защитой (атака переполнения буфера поиска). Вместо этого вы можете использовать fgets (), как предлагают гневные комментарии ниже.