Gerando String Dinamica em C
Publicado por Pedro Robson Leão 04/06/2007
[ Hits: 12.498 ]
Após me deparar com pessoal em várias listas perguntando sobre como construir uma string dinâmica em "C", acabei por construir uma função de uso fácil que encapsula os comando malloc e realloc usados para criar a alocação dinâmica.
Cuidado! Por usar alocação dinâmica, o comando free deve sempre ser utilizado após o uso da variável.
#include <stdio.h> #include <stdlib.h> #include <string.h> /** * int strnadd(char **out, size_t size_out, char *in, size_t size_in) * * Esta funcao utiliza alocacao dinamica nao esqueca de utilizar o comando free para liberar a area ao SO * * @author pedro.leao@gmail.comando * @since 2007/May * * @param (char **) out = endereco do ponteiro de saida * @param size_t size_out = quantidade de bytes existentes no ponteiro de saida * @param char *in = ponteiro com string de entrada * @param size_t = tamanho da string de entrada * @return int = Erro < 0 ou quantidade de bytes total na variavel */ int strnadd(char **out, size_t size_out, char *in, size_t size_in) { char *p; if(!*out) { size_out = 0; *out = malloc(size_in+1); if(!*out) { return -1; } } else { p = realloc(*out, size_out + size_in + 1); if(!p) { return -1; } *out = p; } memcpy( (*out + size_out), in, size_in ); *( *out + size_out + size_in )=0; return size_out + size_in; } /** * int stradd(char **out, size_t size_out, char *in) * * Esta funcao utiliza alocacao dinamica nao esqueca de utilizar o comando free para liberar a area ao SO * * @author pedro.leao@gmail.comando * @since 2007/May * * @param (char **) out = endereco do ponteiro de saida * @param size_t size_out = quantidade de bytes existentes no ponteiro de saida * @param char *in = ponteiro com string de entrada, a string deve ser terminada com zero binario, "{FONTE}' * @return int = Erro < 0 ou quantidade de bytes total na variavel */ int stradd(char **out, size_t size_out, char *in) { return strnadd(out, size_out, in, strlen(in)); } /** * main * Exemplo de uso das funcoes */ int main(int argc, char **argv) { char *string=NULL; size_t str_size=0; int i; for(i=0;i<argc;i++) { str_size = stradd(&string, str_size, argv[i]); str_size = stradd(&string, str_size, " "); } if(string) { printf("\"%s\"\n", string); free(string); } return EXIT_FAILURE; }
Fibbonacci com Memoization - O(n)
Algoritmo de ordenação Quick Sort
Nenhum comentário foi encontrado.
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Mensagem quando tento fazer o apt update && apt upgrade no kal... (2)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código (0)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta