cblc/exercicios/13/README.org

49 lines
1.9 KiB
Org Mode

#+title: Curso Básico da Linguagem C
#+subtitle: Exercícios
#+author: Blau Araujo
#+startup: show2levels
#+options: toc:3
* Exercícios da aula 13: Leitura da entrada padrão com 'read'
- [[../../aulas/13-read/README.org][Anotações da aula]]
- [[https://youtu.be/bW3Xox6LP_U][Vídeo]]
** 1. Desafio: Função 'readline'
Crie uma função que leia uma única linha digitada no terminal e receba
como único argumento uma string que servirá como prompt.
Características da função:
- Leitura deve ser implementada com a chamada de sistema =read=.
- A função implementa um buffer /estático/ de tamanho =BUFSIZ= (=stdio.h=) para
receber a digitação.
- A leitura continua até uma quebra de linha ou até =BUFSIZ=.
- Consome todos os caracteres digitados, inclusive a quebra de linha.
- Em caso de sucesso, retornará o endereço do buffer estático.
- Testa se está sendo utilizada com pipes e redirecionamentos e termina com
erro, se este for o caso.
- Toda e qualquer situação de erro deve causar retorno =NULL=.
- O prompt é impresso sem quebra de linha.
- Os bytes lidos devem ser convertidos em uma string (terminadas com ='\0'=).
- A quebra de linha deve ser removida da string.
Protótipo da função:
#+begin_src c
char *readline(const char *prompt);
#+end_src
** Desafio: Funções auxiliares
Utilizando a chamada de sistema =read=, implemente as funções abaixo:
- =int str_size(const char *str)=: Retorna a quantidade de bytes da string =str=.
- =void trim_str(const char *str)=: Remove espaços em branco e quebras de linha
nas extremidades da string =str=.
- =char **str_split(const char *str, cont char *delim)=: Transforma uma string em
um vetor de strings separadas na ocorrência do delimitador =delim=.
- =char *str_join(const char *str, const char *glue)=: Transforma um vetor de strings
em uma string única com os elementos do vetor unidos por =glue=.