Hallo allerseits,
ich hab folgende Struktur:
typedef struct xy {
unsigned char alter;
unsigned int crc;
unsigned char name[30];
unsigned char vorname[20];
} _xy;
Die Daten liegen alle in einem externen EEProm gespeichert und ich muss
eine Suche implementieren.
Gibt es unter C eine Möglichkeit, den Speicherbereich, den ich ja über
einen Pointer adressiere, irgendwie über die definierten Elemente im
Struct abzubilden ?
Beispiel, wenn ich nur die ersten 3 Buchstaben von Name lesen möchte,
würd
ich jetzt folgendes schreiben:
memcpy (dest_buffer, xmem_pointer+3, 3);
ich würde dort jedoch irgendwie diese notation nutzen wollen, damit ich
später beim erweitern/verändern des structs nicht sämtliche stellen im
code anfassen muss:
memcpy (dest_buffer, xmem_pointer + xy.name, 3)
Aber leider spuckt mit der gcc dort nur einen fehler aus. gibt es
überhaupt eine notation, die mir das ermöglicht ?
Vielen Dank schonmal!
Bernd schrieb:> typedef struct xy {> unsigned char alter;> unsigned int crc;> unsigned char name[30];> unsigned char vorname[20];> } _xy;
dann kannste dir nen Pointer anlegen:
xy* pointxy = NULL;
dann zuweisen:
pointxy = &_xy;
über das Zugreifen:
pointxy->alter = 12;
pointxy->name = "dsad";
so greifste auf Elemente einer Struktur zu, wenn die Startadresse im
Pointer steht.
Bernd schrieb:> memcpy (dest_buffer, xmem_pointer+3, 3);
Problematisch ist da halt, dass dem Compiler freigestellt ist, wie er
die Struct intern organisiert (kann man aber glaub ich irgendwie
deaktivieren -nopacked?).
Wie wärs, den Datensatz als Char-Array aufzubauen, in dem die Angaben
fest vorgegebene Positionen haben?
Es ist übrigens keine gute Idee, eine Benutzerstruktur „_xy“ zu nennen.
Solche Symbole (beginnend mit „_“) sind für Compiler- und
Runtime-Library-Bauer reserviert.
ich nehme alles zurück. mit der idee von floh klappts.
typedef struct xy {
unsigned char alter;
unsigned int crc;
unsigned char name[30];
unsigned char vorname[20];
} _xy;
_xy *point;
point = xmem_pointer;
memcpy (dest_buffer, point->name, 3)
@Zimmerer: jo, ist klar. ist jetzt aber auch nur pseudo-code.
genaugenommen müsste ich jetzt noch die typenkonvertierungen angeben,
damit der compiler nicht meckert.
ich bin nur der meinung, dass ich irgendwann mal zu meinen "turbo
pascal" zeiten das ganze unter pascal so machen konnte, wie ich es oben
aufgeführt hab.
aber ist jetzt egal, vielen vielen dank nochmal an alle!
Mano schrieb:> Bernd schrieb:>> memcpy (dest_buffer, xmem_pointer + xy.name, 3)>> Wie geht das nochmal??? - so irgendwie doch>> xmem_pointer + (&((_xy *)0)->name)
Wenn schon, dann benutzte bitte das offsetof Makro aus stddef.h
memcpy( dest_buffer, xmem_pointer + offsetof( _xy, name ), 3 );
Eine eigene Frage?
Dieser Thread ist über 16 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.