C readline функция

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

13
задан Bill the Lizard 21 September 2012 в 17:15
поделиться

3 ответа

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 .

15
ответ дан 2 December 2019 в 00:45
поделиться

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

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

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
ответ дан 2 December 2019 в 00:45
поделиться

Его не существует.

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

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

-5
ответ дан 2 December 2019 в 00:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: