Termite Postado Janeiro 22, 2015 Denunciar Share Postado Janeiro 22, 2015 (editado) 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 Janeiro 23, 2015 por Termite Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Mnemonic Postado Janeiro 24, 2015 Denunciar Share Postado Janeiro 24, 2015 (editado) 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 Janeiro 24, 2015 por Mnemonic Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Termite Postado Janeiro 24, 2015 Autor Denunciar Share Postado Janeiro 24, 2015 kkkk q desatenção minha eu esqueci do i++,vlw cara Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Termite
eu estou tentando fazer um codigo para alocar uma string dinamicamente sem ter que digitar o tamanho antes:
eu digitei:abc;
e devolveu:
"
v
30"v
alguém poderia me explicar porque ta acontecendo isso,e/ou como corrigir?
Editado por TermiteLink para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
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.