Ir ao conteúdo
  • Cadastre-se
sidyo

Verificação do espaço com malloc

Recommended Posts

Olá, tenho um problema utilizando a função malloc para guardar strings. Desejo guardar strings em uma memória alocada e caso não tenha espaço realocar. Por exemplo, uso malloc para 20 caracteres, salvo uma string com 10 caracteres mais o null e após isso desejo salvar outra string com 10 caracteres, como faria a verificação para saber se tem espaço na memória ou seria necessário realocar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

pois si você alloca tal como

int TAM = 20;
char *vetor = (char*)malloc(TAM);

 

simplesmente pegue e some tudo o que tiver até o nulo mais o tamanho da nova frase e compare com TAM-1(o -1 é por causa do null que tem que estar sim ou sim), si o superar então você precisa usar um realloc.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existe alguma outra maneira que não seja guardar o tamanho utilizado para alocação?

Editado por sidyo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você ta pensando em utilizar sizeof para saber o tamanho esqueça, saiba que tentar utilizar sizeof com uma memória reservada com malloc o único que você obterá é o tamanho do ponteiro... sinceramente não sei se é possivel fazer isso, olha que já pesquisei isso muito tempo mas sem resultado. A mesma coisa sucede quando você passa um vetor/matriz por referencia a outra função, se tentar usar sizeof não vai conseguir, ou seja, você vai obter o tamanho do ponteiro somente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pensei em utilizar calloc no lugar de malloc e, sempre q eu realocar, manualmente colocar 0's. Seria uma solução válida?

Compartilhar este post


Link para o post
Compartilhar em outros sites

valido é! O problema é que você não poderá utilizar sizeof para obter o tamanho do vetor como fazemos com um vetor declarado na pilha, ou ao menos eu não sei fazer isso sem usar uma variável.
Também está a solução do realoc,... e também a solução comentada pelo ciroboy

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×