17. juni 2005 - 11:17
Der er
8 kommentarer og 2 løsninger
problem med fwrite
Hey Jeg forsøger at gemme noget data med fwrite. Jeg bruger følgende kode: #define FIL "c:/fil.txt" char buffer[100]; // heri er det data jeg gerne vil gemme FILE *fp; fp = fopen(FIL, "w"); fwrite(buffer, sizeof(buffer), 1, fp); fclose(fp); // samme data vil jeg så gerne hente igen, med følgende kode char buffer[100]; FILE *fp; fp = fopen(FIL, "r"); fread(buffer, sizeof(buffer), 1, fp); fclose(fp); Det virker også fint. Men lige så snart jeg prøver med pointere så går det galt. Altså: char *buffer = new char[100]; // heri er det data jeg gerne vil gemme FILE *fp; fp = fopen(FIL, "w"); fwrite(&buffer, sizeof(buffer), 1, fp); fclose(fp); // samme data vil jeg så gerne hente igen, med følgende kode char *buffer[100]; FILE *fp; fp = fopen(FIL, "r"); fread(&buffer, sizeof(buffer), 1, fp); fclose(fp); Det kan sagtens compile uden fejl. men det virker ikke. Nogen gode råd?
Annonceindlæg fra Novataris
Vejen til devops med Bavarian Nordic
Bavarian Nordics vækst blev starten på et DevOps-samarbejde med Novataris for hurtigt at kunne tilpasse IT-organisation til forretningen.
7. december 2023
fwrite(&buffer, sizeof(buffer), 1, fp); -> fwrite(buffer, 100, 1, fp); når buffer er en pointer
giver en windows: "Har en fundet en fejl og må afsluttes. Min kode ser sådan her ud: bool skriv = true; if(skriv){ cout << endl << "skriver.." << endl; FILE *fp; fp = fopen(FIL, "w"); fwrite(vol0_buf, vol0.GetSerializeLength(), 1, fp); fclose(fp); } // læs FILE *fp; char *buffer = new char[100]; fp = fopen(FIL, "r"); fread(&buffer, sizeof(buffer), 1, fp); fclose(fp);
fread(&buffer, sizeof(buffer), 1, fp); skal jo også rettes til fread(buffer, 100, 1, fp);
Hvad giver dette, lav selv manglende rutine: bool skriv = true; if(skriv){ cout << endl << "skriver.." << vol0.GetSerializeLength() << endl; FILE *fp; fp = fopen(FIL, "w"); if (!fp) DieInDisgrace(); fwrite(vol0_buf, vol0.GetSerializeLength(), 1, fp); fclose(fp); }
GetSerializeLength() retunerer 71, så strengen er ikke tom :) kan også sagtens deserialize vol0_buf direkte, hvis ik jeg gemmer den først. tak for jeres svar, kigger på det i morgen :)
hmm det er åbenbart først ved deserialize-function det går ned. Men det mærkelige er at hvis jeg gør følgende, så virker det fint: TFilm vol0(0, "Langt fra las vegas vol. 0", 2001, "Casper C.", "Comedy", "Dansk", 5, "..."); char *vol0_buf = new char[vol0.GetSerializeLength()]; vol0.Serialize(vol0_buf); TFilm n = TFilm::Deserialize(vol0_buf); cout << n.GetTitle(); dette virker fint, så må det vel være skriv/hent der fejler noget?
ingen forslag? sætter gerne flere points til hvis det er
problem løst. Ændrede --> fopen(buf, 71, 1, "r+b"); var løsningen :) jer der har hjulpet, smid et svar
19. juni 2005 - 00:18
#10
.
Kurser inden for grundlæggende programmering