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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top