En una tarea para la universidad se sugirió utilizar la función C readline
en un ejercicio. He buscado su referencia pero aún no la he encontrado. ¿Realmente existe? En que encabezado? ¿Puedes publicar el enlace a la referencia?C función readline
Respuesta
Readline existe en dos lugares, libreadline
y libedit
(también llamado libeditline
). Ambos tienen una interfaz idéntica. La diferencia es que libreadline tiene licencia bajo la GPL, libedit es 3 cláusula BSD. Licenciar realmente no es una preocupación para una tarea, al menos no creo que lo sea. Cualquiera de las licencias le permite usar el código libremente. Si enlaza con readline, asegúrese de hacer que todo el programa GPL 2 or later
satisfaga cualquier versión de la GPL que rija el sistema readline
. Puede ser GPL2 + o GPL3 +, según la edad del sistema. No estoy abogando por ninguna licencia, eso depende de usted.
Nota, se encargan de instalar ya sea/o vincular y ajustar según sea necesario (-lreadline
o -ledit
o-leditline
). Ambas son bibliotecas y no forman parte de la biblioteca C estándar.
Editar (idea de último momento):
Si la liberación de un programa en el medio natural, es un buen gesto para permitir al usuario configurar con su readline
de elección. Por ejemplo: --with-readline
o --with-libedit
, etc. Esto permite un paquete binario que se ajuste a su elección de licencia, al menos en cuanto a readline
.
Enlaces: Readline y Edit/Editline.
No existe.
Se equivocaron y se refieren a gets() de stdio.h.
También esta es una función muy insegura debido a que no hay un tamaño máximo para leer el parámetro, por lo que es una seguridad inmediata completa (ataque de desbordamiento del búfer de búsqueda). Puede utilizar fgets() en su lugar, como sugieren los enojados comentarios a continuación.
No, ** no ** use 'gets' - ever! –
@Jerry +1 ... ¿Recomiendas usar fgets? – LB40
Para respaldar Jerry up: 'gets' no le permite especificar un límite en el número de caracteres para leer. Esto es malo, porque estás leyendo una matriz de caracteres, que tiene una longitud fija. Si lees un texto que es más largo que la longitud de la matriz, obtienes un desbordamiento del búfer, lo que puede ocasionar que el programa se cuelgue o que se sobrescriba la memoria que no debe tocarse. –
No creo que sea una función estándar.
me implementación sencilla sería así:
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; } }
Utiliza fgets() para leer hasta MAX_LINE - 1 caracteres en el buffer 'en'. Quita el espacio en blanco anterior y devuelve un puntero al primer carácter que no sea de espacio en blanco.
readline() ofrece un historial de comandos, finalización de pestañas, edición de línea simple, etc. Es una biblioteca externa pero muy popular. –
@Tim: Tiene razón, la biblioteca Readline hace eso, pero creo que solo quiere que una función lea una línea como una matriz C char. – yassin
Creo que quería enlaces a las bibliotecas. –
- 1. C# StreamReader, "ReadLine" para los delimitadores personalizada
- 2. Ayuda para implementar GNU Readline en C
- 3. ir readline -> string
- 4. sockets: BufferedReader readLine (bloques)
- 5. usando readline() para completar
- 6. Java BufferedReader readline blocking?
- 7. Clojure REPL readline like support
- 8. DataInputStream obsoleto readLine() método
- 9. mapa jj a Esc en inputrc (readline)
- 10. rompe la salida colorizada linewrapping con readline
- 11. Funcionalidad Readline en Windows con Python 2.7
- 12. ¿Existe una alternativa simple a Readline?
- 13. Agregar funcionalidad Readline sin recompilar Python
- 14. ¿Cómo usar el método readline() en Java?
- 15. No existe el fichero a cargar - readline
- 16. ¿Cómo compilo el soporte Readline en Ruby
- 17. Readline no funciona en rvm - Ubuntu 11.10
- 18. biblioteca similar a readline para Java
- 19. Java, sockets, BufferedReader y readline colgar ... :(
- 20. ¿Cómo instalas la librería haskell readline en Mac OSX?
- 21. Integrar el kill-ring de readline y el portapapeles X11
- 22. Establecer un límite de tiempo de espera para readLine()?
- 23. Biblioteca readline correctamente enlazada y funcionando correctamente en Windows?
- 24. No existe el fichero a cargar - readline (Error de carga)
- 25. ¿Por qué gnu readline requiere que presione el control c dos veces?
- 26. C# función de puntero en función sobrecargada
- 27. C++ 0x función objeto de función inferencia
- 28. Función String.indexOf en C
- 29. función izquierda en C#
- 30. C función ++ anulando
lo que significa que quiere 'libedit' porque las reglas BSD. : P – Earlz
Sí, he visto 'libedit' encarnar como' libeditline' en más de unos pocos sistemas, aunque no recuerdo qué eran en este momento. –
También tenga en cuenta que no hice ningún enlace a ninguna licencia. readline puede ser GPL2 o posterior o GPL3 dependiendo de la versión que use, sin embargo, la licencia BSD de 3 cláusulas permanece estática. –