• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

lesiano

Não percebo isto;

8 mensagens neste tópico

Olá, tinha um algoritmo para guardar informação de uma lista de listas em ficheiro, mas decidi fazer uma pequena alteração: meter os ficheiros em pastas separadas, para se perceber melhor.

Foi então que alterei isto:

void guarda_ligacoes_nos_ficheiros(CIDADE cabeca)
{
if(cabeca==NULL){}
else
{
CIDADE noactual = cabeca, cab = cabeca;

FILE *p;

char *o = (char*) malloc (100*sizeof(char));
o = (char*) strdup (noactual -> nome);

o = saca_barraene(o);
o = adiciona_txt(o);

p = fopen(o,"a");

if(p==NULL)
{
printf("Erro no carregamento de ligaçoes");
}
else
{
LIGACAO act = noactual->next;

while(act!=NULL)
{
fprintf(p,"%s",act->nome_partida);
fprintf(p,"%s",act->nome_destino);
fprintf(p,"%d\n",act->custo);
act=act->next; 
}

guarda_ligacoes_nos_ficheiros(cab->seg);
}
}
}

Para isto:

void guarda_ligacoes_nos_ficheiros(CIDADE cabeca)
{
if(cabeca==NULL){}
else
{
CIDADE noactual = cabeca, cab = cabeca;
FILE *p;

char *o = (char*) malloc (100*sizeof(char));
o = (char*) strdup (noactual -> nome);

o = saca_barraene(o);
o = adiciona_txt(o);

char path[100]="Cidades/";
strcat(path,o);						

o = saca_barraene(path);
                                                  						  
p = fopen(o,"a");

if(p==NULL)
{
printf("Erro no carregamento de ligaçoes");
}

else{
LIGACAO act = noactual->next;

while(act!=NULL)
{
fprintf(p,"%s",act->nome_partida);
fprintf(p,"%s",act->nome_destino);
fprintf(p,"%d\n",act->custo);
act=act->next; 
}

guarda_ligacoes_nos_ficheiros(cab->seg);
}
}
}

Alterando apenas os caminhos! Mas o segundo não funciona, ele ñ escreve nada nos ficheiros! Mas nem dá "erro" pelo printf, ou seja abre smp os ficheiros, e eu já meti prints para ver se ele entrava nesse else e no while e entra! E já imprimi "act->nome_partida" para ver o que dava e dá certo, mas ñ escreve nada!

Please ajudem-me, estou há horas com isto!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estás aí a fazer um malloc desnecessário, uma vez que o strdup já o faz por si. Quanto ao problema em si, será que a string que queres concatenar ao path tem um tamanho tal que, ao concatenar com o path, ultrapasse o limite de 100 caracteres que definiste par o path?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não, têm 9 caracteres no máximo. :/

Ainda por cima já fiz o print do path depois de tudo e dá o nome certo!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Teres o código devidamente formatado era uma grande ajuda...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É capaz de ser boa ideia usar um debugger, caso contrário é muito mais complicado descobrir os erros, tendo em conta que tens várias funções tuas definidas pelo meio, que podem estar a dar problemas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

i) Código formatado correctamente agora, mudei.

ii) Usar debugger...usei. Mas dá memory corruption. Usei o gdb.

iii) As outras funções estão certas, já que funcionam no primeiro código. Além disso são simples e já foram testadas.

iv) Nota:

Actualizei. Em vez de trabalhar com arrays fiz uma função que adiciona "Cidades/" ao apontador para char. E deu, mas continua o erro, ele ñ imprime nada nos ficheiros. Além disso, ele entra nos ciclos todos, certinhos, já estou a pensar q seja o fprintf q está a falhar...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ii) Usar debugger...usei. Mas dá memory corruption. Usei o gdb.

Mas onde é que dá memory corruption?

Fazer debugging não se resume a colocar o programa a executar num debugger, e esperar que ele diga qual é o erro. Tenta ver onde é que dá erro, vê se todas as variáveis têm o valor que devia nesse ponto, ou volta a executar o programa metendo um breakpoint um pouco antes do erro.

iii) As outras funções estão certas, já que funcionam no primeiro código. Além disso são simples e já foram testadas.

O facto de funcionarem no primeiro código não quer dizer que estejam certas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora