Gerando String Dinamica em C
Publicado por Pedro Robson Leão 04/06/2007
[ Hits: 12.812 ]
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;
}
Rotação à esquerda árvore Binária
Script para trocar o papel de parede do fluxbox em GTK
Nenhum comentário foi encontrado.
XFCE - quase um Gnome ou Plasma mas muito mais leve
LXQT - funcional para máquinas pererecas e usuários menos exigentes
Instalação do K3s Single-Node com Rancher no Ubuntu 24.04
Usei o NotebookLM para Auditar Logs do Linux
Cinnamon seria a aposta acertada frente às outras interfaces gráficas mais populares?
Samba 4 AD-DC 2026: Como instalar e configurar um Active Directory (via APT-GET)
[Resolvido] Sumiço de redes e micro quedas no iwd/iwgtk (Realtek rtw88)
Como Configurar DNS Reverso (PTR) em Ambientes Linux e Microsoft
Preparando o Ambiente para Administrar o Samba 4 a partir do Windows com RSAT
Problema ao instalar Linux Mint. (1)
Midia de instalação LM-21.3 não inicializa (11)
A diferença entre a fala de um Samuel e a fala de alguém que conhece o... (9)









