mirror of
https://gitlab.com/blau_araujo/cblc.git
synced 2025-06-07 03:56:36 -03:00
Desafio função implode #21
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Fala Blau,
consegui escrever a função implode apenas com retorno tipo void e passando o vetor de char result como argumento.
Eu gostaria de escrever a função implode retornando char *, mas não consegui um modo de fazê-lo.
A questão é que result seria uma variável de escopo local à função.
Só definindo result como global ou tem alguma outra maneira?
@NRZCode wrote in #21 (comment):
O buffer de destino da nova string teria que ser um parâmetro:
Se quiser testar o limite do buffer, inclui outro parâmetro:
Isso deixa bem mais seguro.
Outra coisa, você pode testar se
count
é0
, por exemplo, e dar a possibilidade de utilizar vetores de strings terminados com NULL, como oargv
e oenvp
.Do mesmo modo, se
*buf
forNULL
na chamada, o retorno poderia serNULL
e o resultado poderia ser impresso.Editado:
É mais comum, seguro e compacto não receber uma contagem na função, exigindo que os vetores de strings terminem com
NULL
, porque essa é a condição típica de uso.@NRZCode wrote in #21 (comment):
Mais um ponto... se
result
(ou o buffer de destino) já tiver um conteúdo, não seria legal verificar isso para colocar uma cola antes da primeira concatenação?@blau_araujo wrote in #21 (comment):
Pelo visto esse é o jeitão da linguagem C para strings, passar o destino como parâmetro e não retorná-la.
Isso não define o retorno da função do tipo void?
Esse
char *implode(...)
não faz muito sentido.@blau_araujo wrote in #21 (comment):
O uso do count também visa a não concatenação da cola no último elemento da lista.
Atualizando a abordagem buscando o término com
NULL
sem o uso de count@blau_araujo wrote in #21 (comment):
Essa condicional antes do for faz isso.
@NRZCode wrote in #21 (comment):
Eu sugiro
char *
porque o retorno pode ser utilizado, por exemplo, chamando a função em umprintf
.@NRZCode wrote in #21 (comment):
Pois é, tem que pensar em outra lógica... Ou implementar a função
count
também:https://www.php.net/manual/en/function.count.php
;-)
@NRZCode wrote in #21 (comment):
Você editou o código incial? O ideal é manter e postar as modificações nas respostas, senão a conversa fica sem sentido.
@blau_araujo wrote in #21 (comment):
Editei no mesmo momento da postagem.
Após o início das respostas não foi editada a postagem.
@blau_araujo wrote in #21 (comment):
Acabei de verificar que o retorno do buffer de destino vem das 2 formas, através do buffer passado nos argumentos e também no retorno da função.
Então
char *implode(char *result, char *glue, char **list);
traz versatilidade do uso