C readline функция - PullRequest
       28

C readline функция

14 голосов
/ 08 апреля 2010

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

Ответы [ 4 ]

15 голосов
/ 08 апреля 2010

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

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

Редактировать (запоздалая мысль):

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

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

3 голосов
/ 08 апреля 2010

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

У меня простая реализация была бы такой:

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». Он удаляет предшествующий пробел и возвращает указатель на первый непробельный символ.

0 голосов
/ 29 ноября 2018

Если вам нужна функция readLine (), например readLine () в Java-BufferedReader, вы также можете свободно использовать мою функцию «char * get_line (FILE * filePointer)» в «line.h», которую написал только для этой цели: https://github.com/pheek/line.h/blob/master/line.h

0 голосов
/ 08 апреля 2010

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

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

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

...