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

Black Tiger III

[C]-Copiar informaçãontida em apontador

5 mensagens neste tópico

Ora bem cá estou eu outra vez.

O problema que eu coloco, penso que seja o problema que todos aqueles que não gostam e não percebem muito bem apontadores poêm.

Eu estou aqui a fazer o meu trabalhinho, e a guardar tudo numa árvore binária de estruturas.

O que acontece é que ao fim de cada iteração ele muda-me a estrutura mail, e como todos os dados estavam a apontar para essa estrutura, todos os campos da árvore vao ficar também com os mesmos dados.

Sendo assim o que eu preciso, é de retirar toda a informação (copiar toda a informação da estrutura), e não copiar o endereço dessa estrutura, que é o que eu tenho feito. Por isso é que de cada vez que altero a estrutura, altera todos os dados.

deixo aqui como está definida a estrutura em causa:

/* struct to store an hour */
typedef struct Hours
{
  int sec;
  int min;
  int hour;
} Hour;

/* struct to store a date */
typedef struct
{
  char day[4];
  char month[4];
  int numday;
} Date;

/* struct to store all the message receivers */
typedef struct Rec
{
  char *toadd;
  char *toname;
  struct Rec *next;
} Receivers;

/* struct to store one mail */
typedef struct
{
   char *addr;
   char *sentname;
   char *subject;
   Receivers *rec;
   Date *date;
   Hour *hour;
   int year;
   int begin;
   int end;
} Mails;

void receber(Mails *mail)
{
Mails *aux;
aux=(Mails *)malloc(sizeof(Mails));

/*isto é o que eu tenho feito*/
aux=mail;

/*no entanto se eu agora alterar a estrutura mail, vai-me alterar a estrutura aux, o que tem lógica*/
return ;
}

Mais uma vez, se alguem me puder ajudar, agradecia ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se eu percebi, o que queres só fazendo uma cópia integral ou seja, iniciar as outras estruturas de novo e colocar os novos endereços na nova estrutura aux.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se eu percebi, o que queres só fazendo uma cópia integral ou seja, iniciar as outras estruturas de novo e colocar os novos endereços na nova estrutura aux.

Não percebi ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o apontador mail, aponta para uma região de memória com uma estrutura Mail. Ao fazeres aquele  aux = mail, a única coisa que tás a fazer é dizer que o endereço apontado pelo apontador aux é o mesmo que o endereço do apontador mail.

Para fazer essa cópia tens de fazer

aux->year = mail->year ;
aux->begin = mail->begin ;
aux->end = mail->end ;

aux->addr = (char * ) malloc( sizeof(char) * ( strlen( mail->addr ) + 1 ) ) ;
strcpy( aux->addr , mail->addr ) ;
// etc

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