Array im Struct

Oc86

Grünschnabel
Hallo !

Ich habe ein Problem. Unzwar bin ich gerade dabei ein Client für einen PizzaService zu erstellen. Dabei Stehen mir folge strukturen/typedefs zu Verfügung.

typedef unsigned char pizzatype_t; ///< type of pizza
typedef unsigned char pizzasize_t; ///< size of pizza
typedef unsigned short toppings_t; ///< toppings (bit mask)
typedef unsigned short count_t; ///< number of pizzas
typedef unsigned short order_id_t; ///< id of an order
typedef char padding_t; ///< padding byte

typedef struct pizza_s {
pizzatype_t type;
pizzasize_t size;
toppings_t toppings;
} pizza_t;

typedef struct order_s {
count_t numPizzas;
padding_t pad[2];
pizza_t pizzas[1];
} order_t;

Der Benutzer muss bei jeder Bestellung angeben, wieviele Pizzen er bestellen will! Und hier liegt mein Problem ! Wie kann ich die größe des arrays im nachhinein ändern ?
Mit pointer und malloc das Problem zu lösen, funktioniert leider nicht. Das kommt mit einer nachfolgenden implementierung(nicht änderbar) ins gehege. !
Ich hoffe, ihr könnt mir helfen :( Bin schon verschweifelt !


Oc86

P.s.: Programmiersprache C !
 
Hehe, wenn das dein Tutor wüsste ;) aber ich helf mal ganz nett!


Wenn du nen neuen Eintrag erstellen willst, dann mach folgendes:

order_t* data=malloc(sizeof(order_t)+(data->numPizzas-1)*sizeof(pizza_t));
Das alloziiert dir den passenden Speicher. Dann annst du auch per

Code:
data->pizzas[I]
auf die einzelnen zugreifen. und wenn du ne lsite erstellst musst du dran denen,d ass da definitiv nix hinter dem order_t steht..
Code:
typedef struct element_s
{
  struct element_s* r;
  order_id_t id;  
/*... andere daten, zum beispeil, ob die Pizza ausgeliefert wurde ;)*/
  order_t data;    /* muss der letzte eintrag sein 1ELF!*/
} element_t;


Wenn du nun hierfür Speicher allocierst, musst du an die zusätzlichen Pizzen denken:
Code:
 element_t* e = malloc(sizeof(element_t) + (data ->numPizzas -1)*sizeof(pizza_t));


wenn ich jetzt noch mehr schreibe, is hier fast meien ganze Lösung, daher is das bitte nur als anregung von mir zu sehen.


MfG. Dafür, das ich dir die letzte aufgabe rete, erwarte ich auch auf ein Bier eingeladen zu werden ;) wir sehen uns aufm Campus ;)
 
Zurück