Joao Miguel Posted April 28, 2013 at 01:41 AM Report #505036 Posted April 28, 2013 at 01:41 AM Boa noite. Passo a apresentar um excerto de código: #define MAX_BUF_SIZE 1024 FILE *f; FILE *novo_f; char buf[MAX_BUF_SIZE]; char novo_buff[MAX_BUF_SIZE]; if((f = fopen("lista.txt", "r")) != NULL) { while(fgets(buf, sizeof(buf), f)) { if((novo_f = fopen(buf, "r")) != NULL) { while(fgets(novo_buff, sizeof(novo_buff), novo_f)) { ... A string novo_buff tem tamanho 1024. Contudo, este tamanho pode não chegar caso a linha lida seja maior. O que pretendo é que se a linha não tiver sido lida até ao fim, realocar espaço para a string novo_buff. Eu sei que existe uma função que é realloc mas não sei como utiliza-la. Se alguém pode-se dizer uma especie de step by step como fazer isto agradecia. Obrigado.
HappyHippyHippo Posted April 28, 2013 at 02:31 AM Report #505037 Posted April 28, 2013 at 02:31 AM (edited) step by step (sem código de verificação de sucesso de chamadas) : - alocar um bloco de memória com um tamanho definido (malloc) - atribuir o vaor de zero a uma variável auxiliar (indice) - ciclo - ler com fgets na posicao "indice" do array - determinar se a string lida termina no caracter '\n' - se sim - retirar o caracter '\n' e marcar o ciclo como terminado - se não - realocar o array para um tamanho maior - incrementar o valor da variável auxiliar "indice" para o número de dados lidos e guardados no array ... já está ... Edited April 28, 2013 at 02:32 AM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
brunoais Posted April 28, 2013 at 08:04 AM Report #505041 Posted April 28, 2013 at 08:04 AM (edited) 1 dica extra: Tanto quanto sei, por causa da maneira como a maneira como a memória na stack é alocada, não é possível alterar o tamanho de memória alocada. Em vez disso, deves alocar a memória na heap usando o malloc(). Edited April 28, 2013 at 08:04 AM by brunoais "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%.
Joao Miguel Posted April 28, 2013 at 05:20 PM Author Report #505083 Posted April 28, 2013 at 05:20 PM (edited) Fiz o seguinte: #define MAX_BUF_SIZE 1024 FILE *f; FILE *novo_f; char buf[MAX_BUF_SIZE]; char *novo_buff; int i = 0; if((f = fopen("lista.txt", "r")) != NULL) { while(fgets(buf, sizeof(buf), f)) { if((novo_f = fopen(buf, "r")) != NULL) { novo_buff = malloc(1024); while(fgets(novo_buff, sizeof(novo_buff), novo_f)) { while((novo_buff[i] != '\0') && (novo_buff[i] != '\n')) i++; if(novo_buff[i] != '\n') { realloc(novo_buff, 1024); fgets(novo_buff[i], sizeof(novo_buff), novo_f); } ... Não está a funcionar, alguma dica do que esteja mal? P.S. A forma como fiz só está a realocar uma vez, partindo do principio que uma vez so chega. Não vai chegar mas para já o que quero mesmo é por a realocar pelo menos uma vez, para mais que uma é so fazer umas alterações, não vale a pena estar a "complicar" aqui o código pois assim percebe-se melhor. Obrigado. Edited April 28, 2013 at 05:39 PM by Joao Miguel
HappyHippyHippo Posted April 28, 2013 at 05:42 PM Report #505084 Posted April 28, 2013 at 05:42 PM estás a dizer que o que apresentaste foi o algoritmo que escrevi ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Joao Miguel Posted April 28, 2013 at 05:45 PM Author Report #505086 Posted April 28, 2013 at 05:45 PM Uma versão do que escreves-te porque não percebi muito bem o que querias dizer com: - alocar um bloco de memória com um tamanho definido (malloc) - ler com fgets na posicao "indice" do array
HappyHippyHippo Posted April 28, 2013 at 07:03 PM Report #505089 Posted April 28, 2013 at 07:03 PM já alguma veste escreveste um algoritmo onde deliberadamente não colocaste alguns elementos ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Joao Miguel Posted April 28, 2013 at 07:17 PM Author Report #505090 Posted April 28, 2013 at 07:17 PM Penso que não, se esses elementos são necessários para o algoritmo não vejo razão para não os colocar. Mas não estou a perceber onde queres chegar com a pergunta...
HappyHippyHippo Posted April 28, 2013 at 07:19 PM Report #505091 Posted April 28, 2013 at 07:19 PM (edited) Penso que não, se esses elementos são necessários para o algoritmo não vejo razão para não os colocar. Mas não estou a perceber onde queres chegar com a pergunta... porque foi exactamente isso que fizeste como o algoritmo que te foi apresentado ... Edited April 28, 2013 at 07:19 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Joao Miguel Posted April 28, 2013 at 07:33 PM Author Report #505092 Posted April 28, 2013 at 07:33 PM Quais foram os elementos que não coloquei?
HappyHippyHippo Posted April 28, 2013 at 10:09 PM Report #505106 Posted April 28, 2013 at 10:09 PM mete no teu código comentários a dizer o passo que foi implementado, e depois diz que fizeste tudo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now