Pergunta
Em uma tarefa para a faculdade, foi sugerido usar o c readline
função em um exercício. Eu procurei sua referência, mas ainda não a encontrei. Isso realmente existe? Em qual cabeçalho? Você pode postar o link para a referência?
Solução
ReadLine existe em dois lugares, libreadline
e libedit
(também chamado libeditline
). Ambos têm uma interface idêntica. A diferença é que o Liberadline está licenciado sob a GPL, o LIBEDIT é 3 Cláusula BSD. O licenciamento não é realmente uma preocupação para uma tarefa, pelo menos não acho que seja. Qualquer licença permite que você use o código livremente. Se você vincular a ReadLine, certifique -se de fazer todo o programa GPL 2 or later
que satisfazerá qualquer versão do GPL governa o sistema readline
. Pode ser GPL2+ ou GPL3+, dependendo da idade do sistema. Não estou defendendo nenhuma licença, isso depende de você.
Observe, tome cuidado para instalar / ou ajustar a vinculação conforme necessário (-lreadline
ou -ledit
ou -leditline
). Ambas são bibliotecas e não fazem parte da biblioteca C padrão.
Editar (reflexão tardia):
Se lançar um programa para a natureza, é um bom gesto para permitir que o usuário o configure com o seu readline
de escolha. Por exemplo: --with-readline
ou --with-libedit
, etc. Isso permite um pacote binário que esteja em conformidade com a escolha da licença, pelo menos até readline
está preocupado.
Links: Leia a linha e Editar/editar linha.
Outras dicas
Eu não acho que seja uma função padrão.
Eu implementação simples seria assim:
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; } }
Ele usa fgets () para ler até max_line - 1 caracteres no buffer 'in'. Ele tira o espaço em branco e retorna um ponteiro para o primeiro caractere não-branco.
Se você precisar de uma função "readLine ()", como o ReadLine () no Java-BufferedReader, também pode usar livremente minha função «char * get_line (file * filepointer)» em "line.h", que eu escrevi apenas para este propósito: https://github.com/pheek/line.h/blob/master/line.h
Não existe.
Eles foram enganados e referidos para receber () de stdio.h.
Além disso, essa é uma função muito insegura devido ao tamanho máximo para ler parâmetro, tornando -o total imediato de segurança (ataque de tampão de pesquisa). Em vez disso, você pode usar fgets (), como os comentários raivosos abaixo sugerem.