Structs speichern - FAQ-Bsp funktioniert nicht
-
Folgender Code:
// So sieht die Struct aus: struct PLAYER { char name [50]; unsigned short int score; unsigned short int level; }; ... /* Vorher wurden die Highscores ausgelesen, da es nur 5 sind lese ich alle aus und speichere nach der Änderung wieder alle 5 */ FILE* Highscore = fopen(".\\highscores.dat","wb"); for(unsigned short int i = 0;i < 5;++i) { fwrite(Player[i],sizeof(Player[i]),1,Highscore); } fclose(Highscore);
Bringt mir diesen Fehler vom Compiler:
error C2664: 'fwrite' : Konvertierung des Parameters 1 von 'struct PLAYER' in 'const void *' nicht moeglich
Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden.Warum kann er PLAYER nicht in void* konvertieren? In der FAQ ist es doch genau so beschrieben. Will wieder C++ :(;).
MfG SideWinder
-
Der Fehler tritt auf, weil du keinen Pointer uebergibst.
ersetze Player[i] durch Player+i*sizeof(struct player) oder durch &Player[i]
-
Ist sowas nicht wegen den unterschiedlichen paddings gefährlich wenn man es auf verschiedenen Compilereinstellungen testet?
-
jo, Binär-Ausgabe ist abhaengig vom Compiler/Platform. Vorallem bei structs ist das problematisch, wegen dem Padding
-
kingruedi schrieb:
ersetze Player[i] durch Player+i*sizeof(struct player)
Und streiche '*sizeof(struct player)'.