#+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=.

