Forum: PC-Programmierung pointer auf struct struct


von Tim (Gast)


Lesenswert?

Ich habe eine einen Zeiger auf eine Struktur namens 
"received_packets_struct" (ähnlich einer einfach verketteten Liste). 
Diese Struktur enthält eine zweite Structur namens "DataPacketStruct" 
und einen Zeiger auf die nächste Struktur in der Liste:
1
struct DataPacketStruct
2
{
3
  unsigned char start_byte;
4
  unsigned char sender_address;
5
  unsigned char receiver_address;
6
  unsigned char msg_type;
7
  unsigned char LSB;
8
  unsigned char MSB;
9
  unsigned char crc;
10
}; 
11
12
struct received_packets_struct
13
{   
14
  struct DataPacketStruct value;
15
  struct received_packets_struct *next;
16
};

Nun möchte ich eine Funktion "append" schreiben die als Paramter einen 
Zeiger auf "received_packets_struct" sowie auf "DataPacketStruct" 
erhält.
1
struct DataPacketStruct new_packet = {1, 1, 1, 2, 2, 2, 3};  
2
struct received_packets_struct *start_elem = NULL;
3
4
append(&start_elem, &new_packet);

Mein Problem ist der Zugriff auf die Struktur DataPacketStruct innerhalb 
received_packets_struct. Wie mache ich das richtig?
1
void append(struct received_packets_struct **start_elem, struct DataPacketStruct *new_elem)
2
{
3
  struct received_packets_struct * tmp;
4
  tmp = *start_elem;
5
  if(*start_elem == NULL)
6
  {
7
    if((tmp = malloc(sizeof(struct received_packets_struct))) == NULL)
8
    {
9
      printf("Speicher voll");
10
      return;
11
    }
12
    tmp->value->start_byte = new_elem->start_byte; //<- hier steckt das Problem   "Left operand of -> has incompatible type 'struct DataPacketStruct'."
13
14
    tmp->next = NULL;
15
    *start_elem = tmp;
16
  }
17
...

von Rolf Magnus (Gast)


Lesenswert?

Tim schrieb:
>     tmp->value->start_byte = new_elem->start_byte; //<- hier steckt das Problem
>  "Left operand of -> has incompatible type 'struct DataPacketStruct'."

-> dereferenziert einen Zeiger, aber tmp->value ist kein Zeiger.
Deshalb muß es tmp->value.start_byte heißen.

von Tim (Gast)


Lesenswert?

Danke Rolf,
manchmal sieht man den Wald vor lauter Bäumen nicht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.