Frage zu struct in C

Ich habe folgenden Code:

struct student{
unsigned long mnr;
int scores[NUM_TASKS];
struct student* buddy;
};

struct student a;
int array[NUM_TASKS]={1,2,3,4};
a.scores=array;
In der oben mit

Hi,

schau mal hier da wurde dies gelöst:

http://www.mikrocontroller.net/topic/77741

http://www.willemer.de/informatik/cpp/array.htm

hab leider grad nix zur hand zum testen aber habe was in erinnerung, dass c nicht automatisch einen kopiervorgang startet. wenn du eine kopie von „array“ in scores haben möchtest, musste dir ne kleine schleife basteln und manuell kopieren. andernfalls musste nen pointer drauf legen, um darauf zugreifen zu können.

p.s. …ich wusste gar nicht das ich hier angemeldet bin und ich bin alles andere als ein c-gott…bei java z.B. könnt ich dir eher helfen.
viel glück bei der lösung deines problems!

Danke jetzt gehts. Schleife war das Zauberwort.

Komme auch aus der Java Ecke. Da gibts solche Probleme
nicht :smile:

hab leider grad nix zur hand zum testen aber habe was

in

erinnerung, dass c nicht automatisch einen

kopiervorgang

startet. wenn du eine kopie von „array“ in scores haben
möchtest, musste dir ne kleine schleife basteln und

manuell

kopieren. andernfalls musste nen pointer drauf legen,

um

darauf zugreifen zu können.

p.s. …ich wusste gar nicht das ich hier angemeldet

bin und

ich bin alles andere als ein c-gott…bei java z.B.

könnt ich

dir eher helfen.
viel glück bei der lösung deines problems!

Das Problem liegt daran, dass scores selber ein Array ist. Ein fix angelegtes Array hat einen konstanten Pointer der immer auf die gleiche Speicheradresse zeigt und den du nicht verändern darfst.

Mit deiner Zuweisung würdest du aber den „scores“ - Pointer auf die Speicheradresse des „array“ Pointers zeigen lassen, deswegen kommt der Fehler.

Hallo,

ein Array wird auf dem Stack abgelegt. Dort wird fest ein Speicherbereich für das Array a.scores reserviert. Dies verhält sich wie eine Konstante. Nur die Werte im Array selbst können mittels a.scores[0]=array[0]; usw. verändert werden. Ich würde eine Schleife bauen, die durch alle Elemente im array durchiteriert und jedes einzelne Element dem entsprechenden a.scores-Element zuordnet.

Nicht vergessen vorher prüfen, ob a.scores wirklich identisch groß ist wie array.

Viele Grüße
Steffen

Arrays lassen sich nicht so einfach ohne weiteres kopieren (Ein Array ist in C keine wirklicher Datentyp, sondern der Name entspricht der Pointer auf das erste Element). Am besten du befüllst dein Array über eine for-Schleife:

int i;

for(i=0;i

sorry, da bin ich die völlig falsche Adresse. Warum mich WWW da ausgesucht hat, ist mir ein Rätsel.
Grüße, h. falk