Structs,Pointer,Speicher
-
Hallo zusammen,
ich habe folgendes Problem. Ich möchte mit einem Pointer über die Elemente eines Structs laufen. Aber der Pointer zeigt sonst wo hin.
typedef struct ip_header{ u_char ver_ihl; u_char tos; u_short tlen; u_short identification; u_short flags_fo; u_char ttl; u_char proto; u_short crc; ip_address saddr; ip_address daddr; u_int op_pad; }ip_header; ... ip_header *ih; ... u_short *ptr; *ptr = ih->tlen; for (i=0; i<3; i++) { printf("%X ", ptr); ptr++; } printf("\n%X ", &(ih->tlen)); printf("\n%X ", &(ih->identification)); printf("\n%X ", &(ih->flags_fo));
Die Elemente tlen, identification und flags_fo sind Elemente des Structs ih und je 2 Byte lang. Das Ergebnis ist folgendes:
6FCC9172 6FCC9174 6FCC9176
B40E8C
B40E8E
B40E90Ich hätte gedacht der Inhalt des Pointers wären die Adressen der Elemente des Structs. Ich habe schon hin und her probiert und bin nun verzweifelt genug und hier zu fragen.
Wo ist mein Denkfehler ?
lg
-
*ptr = ih->tlen;
weist der Speicherstelle, auf die ptr zeigt (in diesem Fall Nirwana), den Inhalt des Elementes tlen von der struct zu, auf die ih zeigt.Darunter hast du es doch schon richtig gemacht, du willst ja nicht den Inhalt haben sondern die Adresse:
ptr = &(ih->tlen);
-
Vielen Dank für die schnelle Hilfe.
Ich habs abgeändert.
ptr = &(ih->tlen);
Mein Hirn hat mich einfach nicht über diesen offensichtlichen Fehler informiert.
lg
-
karlematisch schrieb:
Mein Hirn hat mich einfach nicht über diesen offensichtlichen Fehler informiert.
Willkommen im Club
Der Formatspecifier (bei printf) für Pointer ist übrigens %p.
Das ein Pointer die gleiche Größe wie ein int hat ist (mehr oder weniger) Zufall.
Daher kannst du nicht davon ausgehen, dass du mit %X das Richtige zu sehen bekommst.