URL: https://www.overclockers.at/coding-stuff/c_problem_mit_struct_220750/page_1 - zur Vollversion wechseln!
hallo
ich komm mit structs noch nicht ganz zurecht. Es soll schlussendlich darauf hinauslaufen eine struct zu speichern.
Folgendes funktioniert ja schon mal:
struct Header
Code:typedef struct { int id; double rating; int content_length; } Header;
Code:typedef struct { char *title; char *mp3_name; char *interpreter; char *comment; } Content;
Code:int main() { Header header[2] = { {1,3.5,10} , {2,9.0,10} }; Content content[2] = { {"title 1","name1","interpret1","comment1"} , {"title 2","name2","interpret2","comment2"} }; Header header2[2];// Content content2[2];// //DATEN BINÄR SPEICHERN!!! FILE *output = fopen("file", "wb"); // append binary if (output) // file opened OK { int writtenheader = fwrite(header, sizeof(Header), 2, output); int writtencontent = fwrite(content, sizeof(Content), 2, output); printf("%d records written to file.\n", writtenheader+writtencontent); fclose(output); } //DATEN BINÄR LADEN!!! FILE *input = fopen("file", "rb"); // append binary if (input) // file opened OK { int readheader = fread(header2, sizeof(Header), 2, input); int readcontent = fread(content2, sizeof(Content), 2, input); printf("%d records read from file.\n", readheader+readcontent); fclose(input); }
Code:typedef struct DataItem_ { Header header; Content content; struct DataItem_ *right; // pointer to next item struct DataItem_ *left; // pointer to previos item } DataItem;
Code:DataItem = *list; list = malloc(sizeof(DataItem)); list->header.id = 5; list->header.rating = 6; list->header.content_lenght = 7;
und damit auch nicht das speichern:Code:list->header = {5,6,7}
Code:fwrite(list->header, sizeof(Header), 2, output);
Die Pointer in ein File speichern ist sinnlos. Du willst ja die Inhalte und nicht die (zufälligen) Adressen im Speicher. Du musst dir wohl zuerst das Fileformat überlegen.
';' fehlt am ende das sollte den Syntax error aber erst in der nächsten Zeile werfenZitat von sLy-es geht aber nicht mehr: (syntax error before { token)Code:list->header = {5,6,7}

fwrite erwartet einen pointer, also &list->headerZitat von sLy-und damit auch nicht das speichern:Code:fwrite(list->header, sizeof(Header), 2, output);
Union mit Byte-Array oder Casten. So wie ganz oben geht afaik nicht.Zitat von sLy-Wie kann ich das umgehn und so wie ganz oben auf header zugreifen?

Zitat von watchout@Ringding: fwrite erwartet einen pointer...
Er meint die Pointer im struct, nicht den pointer zum struct für fwrite.Zitat von watchout@Ringding: fwrite erwartet einen pointer...
Er schreibt doch den header da is kein einziger pointer zu sehenZitat von thatTrotzdem ist es sinnlos, wenn nach dem Schreiben der struct Content 4 Pointer im File stehen, dafür keine Strings.

Er schreibt und lädt aber auch 'Content'.Zitat von watchoutEr schreibt doch den header da is kein einziger pointer zu sehen
@Spikx: same.
oh *dort*... Finds grad hart dass das 3 Leute gesehen haben und ich nicht 
Zum Initialisierungsproblem: evt. musst du
machen.Code:Header header[2] = { {1,3.5,10} , {2,9.0,10} }; list->header = header;
Die Typen passen "nicht ganz" und für C99 muss es in einen Block ({})Zitat von SpikxZum Initialisierungsproblem: evt. musst dumachen.Code:Header header[2] = { {1,3.5,10} , {2,9.0,10} }; list->header = header;

naja geht leider nicht und hab auch keine lösung gefunden. Hab jetzt jeden inhalt einzeln gespeichert - is zwar nicht ganz elegant gelöst - aber was solls ^^
trozdem danke für die hilfe!
ESP Ex3? ^^
Invalid Input.Zitat von sLy-naja geht leider nicht
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026