Datei binär schreiben lesen

Hi.
Hatte jetzt wieder zeit mich meinem Problem zu widmen.
Meine Funktion gibt mir nun alle Einträge aus, allerdings wird der letzte Eintrag doppelt ausgegeben.
Ach, es ist immer wieder das gleiche. :( Und da hab ich es dir schon vorgemacht...

Nicht so:
C++:
    while (!binary_file.eof()) {  
		binary_file.read(reinterpret_cast<char *>(&p_Data),sizeof(start_destination));
Sondern so:
C++:
while (binary_file.read(reinterpret_cast<char *>(&p_Data),sizeof(start_destination)) {
Gruß
 
Zuletzt bearbeitet von einem Moderator:
Hi,

ich hab den code ein bisschen erweitert, bzw. in eine Klasse eingebaut.
Bevor ich nun einen neuen Thread aufmache poste ich es hier.
Das schreiben an sich klappt. Allerding wird der Name des Ortes nicht gespeichert.
Anscheined klappt bei der Umwandlung von string in char etwas nicht.
Die get-Methode "get_name" liefert einen String mit dem Namen des Ortes zurück.
Hier einmal der Code.

C++:
void write_to_binary_file()
{       
	struct daten
	{
		char test[30];
		int x_ko;
		int y_ko;
	};
	daten p_daten;

	const char *x;
	struct knoten *p = anfang;  
	ofstream binary_file;// Zieldatei (Schreiben)
	binary_file.open("binaer.dat", ios::out|ios::binary); // zum Schreiben öffnen
	if (!binary_file) {                   // Datei kann nicht geoeffnet werden
		cerr << "binaer.dat" << " kann nicht geoeffnet werden!\n";
		getch();
	}
	while (p != NULL) {                        
					x = p->info.get_name().c_str();//string zu char umwandeln
					strcpy( p_daten.test, x);
					p_daten.x_ko = p->info.get_x_koordinate();
					p_daten.y_ko = p->info.get_y_koordinate();
					binary_file.write(reinterpret_cast<char *>(&p_daten),sizeof(daten));
					p = p->next;                 // p auf Folgeelement setzen
			}

	binary_file.close();
}
 
Hi.
C++:
					x = p->info.get_name().c_str();//string zu char umwandeln
					strcpy( p_daten.test, x);
Das geht so nicht. Die get_name() Methode liefert ein temporäres Objekt. Die c_str() Methode liefert einen entsprechenden Zeiger auf die Daten dieses temporären Objektes den du dann speicherst.

Das temporäre Objekt wird üblicherweise gleich wieder weggeräumt, so das du einen ungültigen Zeiger hast.

Vermeide die Verwendung von Zeigern.

C++:
strcpy(p_daten.test, p->info.get_name().c_str());
Gruß
 
Zurück