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 tema 
 
Forsvar & beredskab 
Cybersikkerhed, realtidsdata og robuste it-systemer er blevet fundamentet for moderne forsvar.
 
 
	
		
		
			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