From dd6d30fd25b1e174a5080ffeb18588a16418fd2d Mon Sep 17 00:00:00 2001 From: Blau Araujo Date: Thu, 1 May 2025 12:59:23 -0300 Subject: [PATCH] =?UTF-8?q?exerc=C3=ADcios=20da=20aula=2013?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- exercicios/13/README.org | 49 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 exercicios/13/README.org diff --git a/exercicios/13/README.org b/exercicios/13/README.org new file mode 100644 index 0000000..7b497b6 --- /dev/null +++ b/exercicios/13/README.org @@ -0,0 +1,49 @@ +#+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=. +