Variable Größe von Strukturen/Arrays

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
FritziFoppel
Beiträge: 101
Registriert: Sa Mär 02, 2013 6:53 pm
Wohnort: Göppingen

Variable Größe von Strukturen/Arrays

Beitrag von FritziFoppel » So Mär 10, 2013 12:56 am

Hi,
Ich versuch gerade mein altes Programm, aus dem Thread "Beschreiben von Dateien", ein wenig zu verbessern. Dabei stoß ich auf das Problem, dass ich meine Strukturen nur statisch aufbauen kann (ich, bis jetzt zumindest). D.h. für eine Struktur muss ich einen bestimmten Wert, für die Anzahl an zu erstellenden Strukturen angeben.

Code: Alles auswählen

struct Elemente
{
    char element1 [64];
    char element2 [64];
    char element3 [64];
    char element4 [64];
    char element5 [64];
};

struct Elemente elemente[5];
Geht es dann, dass ich die Eingabe abbrechen kann, wenn ich genug von der Struktur hab?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Variable Größe von Strukturen/Arrays

Beitrag von Xin » So Mär 10, 2013 10:56 am

In der Regel unterteilst Du die Strukturen weiter und machst dann Zeiger auf die kleineren Strukturen:

Code: Alles auswählen

struct Elemente
{
  unsigned int len1;
  char * element1;
  unsigned int len2;
  char * element2;
  unsigned int len3;
  char * element3;
  unsigned int len4;
  char * element4;
  unsigned int len5;
  char * element5;
};
Das kann man natürlich weiter zusammenfassen:

Code: Alles auswählen

struct Element
{
  unsigned int length;
  char * elements;
};

struct Elemente
{
  struct Element element1;
  struct Element element2;
  struct Element element3;
  struct Element element4;
  struct Element element5;
};
Wie Du die Daten wegschreibst, musst Du die Daten "serialisieren". Du schreibst die Länge der Daten und anschließend genau soviele Bytes aus dem Bereich, auf den der Zeiger zeigt.

Zeiger musst Du in dem Fall natürlich mit malloc/free anlegen (unter C)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten