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