W zadaniu na studia zasugerowano użycie funkcji C readline
w ćwiczeniu. Szukałem jej referencji, ale wciąż jej nie znalazłem. Czy to naprawdę istnieje? W którym nagłówku? Czy możesz przesłać link do referencji?C funkcja readline
Odpowiedz
Readline istnieje w dwóch miejscach: libreadline
i libedit
(zwany także libeditline
). Oba mają identyczny interfejs. Różnica polega na tym, że libreadline jest licencjonowany na licencji GPL, libedit to 3 klauzula BSD. Licencjonowanie naprawdę nie stanowi problemu dla zadania, przynajmniej nie sądzę, że tak jest. Każda licencja pozwala na swobodne korzystanie z kodu. Jeśli łączysz się z readline, upewnij się, że cały program GPL 2 or later
, który zaspokoi dowolną wersję GPL reguluje system readline
. Może to być GPL2 + lub GPL3 +, w zależności od wieku systemu. Nie jestem zwolennikiem żadnej z licencji, to zależy od ciebie.
Uwaga, dbać, aby zainstalować albo/albo i dostosować powiązanie ile potrzeba (-lreadline
lub-ledit
lub-leditline
). Oba są bibliotekami, a nie częścią standardowej biblioteki C.
Edit (refleksja):
Jeśli wydać program na dziko, jest to miły gest, aby umożliwić użytkownikowi skonfigurować go z ich readline
wyboru. Na przykład: --with-readline
lub --with-libedit
itd. Pozwala to na pakiet binarny, który jest zgodny z ich wyborem licencji, przynajmniej jeśli chodzi o readline
.
Linki: Readline i Edit/Editline.
Nie istnieje.
Pomylili się i zostali odesłani do gets() from stdio.h.
Jest to także bardzo niebezpieczna funkcja ze względu na brak maksymalnego rozmiaru parametru do odczytu, co powoduje, że jest ona natychmiast bezpieczna w całości (atak przekroczenia bufora wyszukiwania). Zamiast tego możesz użyć fgets(), jak sugerują poniższe złe komentarze.
Nie, ** nie używaj 'dostaje' - nigdy! –
@Jerry +1 ... czy polecasz używanie fgetów? – LB40
Aby cofnąć Jerry'ego w górę: 'gets' nie pozwala określić limitu liczby znaków do odczytania. Jest to złe, ponieważ czytasz tablicę znaków o stałej długości. Jeśli czytasz tekst dłuższy niż długość tablicy, otrzymujesz przepełnienie bufora, co może spowodować awarię programu lub zastąpienie pamięci, która nie powinna zostać dotknięta. –
Nie sądzę, że jest to standardowa funkcja.
ja prosta implementacja byłaby tak:
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; } }
Wykorzystuje fgets(), aby odczytać maksymalnie MAX_LINE - 1 znaków do bufora 'w'. Usuwa on poprzedzające białe znaki i zwraca wskaźnik do pierwszego znaku, który nie jest spacja.
readline() oferuje historię poleceń, uzupełnianie kart, prostą edycję linii, itp. Jest to zewnętrzna, ale szalenie popularna biblioteka. –
@Tim: Masz rację, biblioteka Readline to robi, ale myślę, że chce tylko funkcji odczytu linii jako tablicy znaków C. – yassin
Myślę, że chciał linków do bibliotek. –
- 1. Pomoc w implementacji GNU Readline w C
- 2. yum pokazując readline zainstalowany, ale nie działa polecenie readline
- 3. niezdefiniowane odwołanie do `readline '
- 4. Lekka wersja readline GNU
- 5. C/C++ funkcja/metoda dekoracji
- 6. 'readline/readline.h' nie znaleziono pliku
- 7. mapa jj ESC w inputrc (readline)
- 8. C# funkcja ogólna pytanie
- 9. Funkcja widełek() w C
- 10. Funkcja String.indexOf w C
- 11. C# Enum Funkcja Parametry
- 12. Funkcja uśpienia w C++
- 13. funkcja inline w c
- 14. C# isPowerOf funkcja
- 15. Funkcja opcode w C
- 16. C - funkcja wewnątrz struktury
- 17. C funkcja tajemniczo dryfował?
- 18. Funkcja C++ TerminateProcess
- 19. funkcja dla C++ struct
- 20. C funkcja składnia
- 21. mkdir C++ funkcja
- 22. asynchroniczna funkcja C++ 0x
- 23. C++ Funkcja zwracania wyliczenia?
- 24. Skumulowana normalna funkcja dystrybucji w C/C++
- 25. C++ 11: Wywoływanie C funkcja ++ okresowo
- 26. Dlaczego funkcja C# ProcessStartInfoRedirectStandardOutput spowodowałaby niepowodzenie procesu xcopy
- 27. Użyj readline do odczytu pliku txt Python3
- 28. Co jest nie tak z readline?
- 29. Pierwsze readline do blokowania na FIFO
- 30. Jak korzystać z metody readline() w Javie?
co oznacza, że chcesz 'libedit' powodować reguły BSD. : P – Earlz
Tak, widziałem 'libedit' wcielony jako' libeditline' na więcej niż kilku systemach, chociaż nie pamiętam, co oni w tej chwili byli. –
Należy również pamiętać, że nie zawierałem żadnej z tych licencji. readline może być GPL2-lub-nowszy lub GPL3 w zależności od używanej wersji, jednak licencja BSD na 3 klauzule pozostaje statyczna. –