Pular para o conteúdo

Gerando String Dinamica em C

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.
Pedro Robson Leão pleao
Hits: 12.899 Categoria: C/C++ Subcategoria: Avançado
  • Download
  • Nova versão
  • Indicar
  • Denunciar

Descrição

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.
Download strfunctions.c Enviar nova versão

Esconder código-fonte

#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, "\0'
 * @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;
}

Arvore AVL

Arquivos utilizados no artigo: "Desenvolvendo um plugin para o XMMS"

Stack (LIFO)

Calculadora em C++

Estrutura Simples (REGISTRO)

Nenhum comentário foi encontrado.

Contribuir com comentário

Entre na sua conta para comentar.