Ir para conteúdo
Fórum Script Brasil
  • 0

problema com alocação dinamica-Linguagem C


Termite

Pergunta

eu estou tentando fazer um codigo para alocar uma string dinamicamente sem ter que digitar o tamanho antes:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>



main(){

    char * Pstring;

    int i;

    i=0;

    Pstring=(char *) malloc((i+1)*sizeof(char));//escolhe a posição inicial da string

    while(1){

        Pstring=(char *) realloc(Pstring,(i+1)*sizeof(char));//deveria realocar o conteudo

        Pstring[i]=getch();

        if(Pstring[i]=='0'){

            break;

        }

        printf("%c",Pstring[i]);

    }

    i=0;

    while(Pstring[i]!='\0'){

        printf("%c \n",Pstring[i]);

        i++;

    }

    printf("%d",strlen(Pstring));

    printf("%s",Pstring);

    free(Pstring);

}

eu digitei:abc;

e devolveu:

"

v

30"v

alguém poderia me explicar porque ta acontecendo isso,e/ou como corrigir?

Editado por Termite
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Na quarta linha da função main, você declarou seu ponteiro assim:

Pstring=(char *) malloc((i+1)*sizeof(char));

O valor de 'i' é zero, o que significa que Pstring equivale a apenas UM char.

Dentro do WHILE você usa a função realloc:

Pstring=(char *) realloc(Pstring,(i+1)*sizeof(char));

Mas o valor de 'i' ainda é zero, então mesmo com o ponteiro sendo realocado pra outro endereço, ele continua guardando apenas UM char.

Por isso que quando você tenta acessar outras posições de memória usando como base o endereço de Pstring, o programa imprime lixo de memória.

Editado por Mnemonic
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...