char-array in Datei speichern funktioniert - jedoch nicht korrekt



  • Hallo,

    ich habe ein Problem mit meinem Programm. Und zwar ist es so, dass man den Username eingibt, welcher dann gespeichert wird. Jedoch, immer wenn ich beim nächsten Programmstart das char-array anzeigen möchte funktioniert's nicht. Entweder er zeigt mir gar nichts, oder er zeigt mir einfach einen Haufen voller sinnlosen Zeichen. Ich befürchte, dass ich das array nicht richtig initialisiert habe, jedoch finde ich einfach den Fehler nicht (mein Compiler meckert auch nicht).

    Irgendwie hat es bei allen Programmen immer fantastisch geklappt, jedoch nicht bei diesem Programm. Was habe ich nur falsch gemacht? Ich zeige euch etwas Code.

    Usernamen initialisieren und eingeben:

    // initialize variables
    void initialize_variables ()
    {
    	program_calls = 1;
    	username[0] = '\0';
    } // initialize variables
    
    // enter username
    void enter_username ()
    {
    	std::cout << "Enter username: ";
    	std::cin.get (username, 99);
    } // enter username
    

    Usernamen anzeigen:

    // function to show system data
    //
    void csystem::show_data ()
    {
    	// title
    	light_blue ();
    	cout << " SYSTEM DATA " << endl;
    	white ();
    	cout << "-------------" << endl;
    
    	// show system data
    	cout << "Program calls : " << program_calls << endl;
    	cout << "Username      : " << username << endl;
    	cout << "-------------\n\n";
    
    	// continue the program
    	yellow ();
    	next ();
    	white ();
    
    } // function to show system data
    

    Anschließend noch meine file functions:

    #include <iostream>
    #include <fstream>
    // header files
    #include "system functions.hpp"
    #include "file functions.hpp"
    // classes
    #include "csystem.hpp"
    #include "ccalculator.hpp"
    
    using namespace std;
    
    // function to load file
    //
    void load_file (csystem *psystem, ccalculator *pcalculator)
    {
    	ifstream input ("DATA.cca", ios::binary);
    	input.read ((char*) &psystem, sizeof (psystem));
    	input.read ((char*) &pcalculator, sizeof (pcalculator));
    	input.close ();
    }
    
    // function to save file
    //
    void save_file (csystem *psystem, ccalculator *pcalculator)
    {
    	ofstream output ("DATA.cca", ios::binary);
    	output.write ((char*) &psystem, sizeof (psystem));
    	output.write ((char*) &pcalculator, sizeof (pcalculator));
    	output.close ();
    }
    
    // function to load or create file
    //
    void load_create_file (csystem *psystem, ccalculator *pcalculator)
    {
    	// if the file exists load them
    	//
    	ifstream input ("DATA.cca", ios::binary);
    	if (input.is_open ())
    	{
    		// load file
    		load_file (psystem, pcalculator);
    
    		// increment program call and save file
    		psystem->increment_program_call ();
    		save_file (psystem, pcalculator);
    	}
    
    	// otherwise create file
    	//
    	else
    	{
    		// initialize member variables
    		psystem->initialize_variables ();
    		pcalculator->initialize_variables ();
    
    		// enter username and clear screen
    		psystem->enter_username ();
    		clr_scr ();
    
    		// create file
    		save_file (psystem, pcalculator);
    	}
    
    } // function to load or create file
    

    Ich blicke wirklich nicht durch wo ich einen Fehler programmiert haben könnte.
    Oder liegt's an den Pointern?
    Weiß einer von euch eventuell mehr?

    Bemerke: Ich verlange nicht nach fertigen Lösungen!!


  • Mod

    Deine sizeof Statements lifern immer 4! Das ist nicht die Länge eines char Arrays, sondern die Größe eines Zeigers.

    Nimm strlen oder gleich std::string.



  • Martin Richter schrieb:

    Deine sizeof Statements lifern immer 4! Das ist nicht die Länge eines char Arrays, sondern die Größe eines Zeigers.

    Nimm strlen oder gleich std::string.

    Gut, ich kann einen String benutzen, jedoch kenne ich das schon von vorherigen Programmen, dass das nicht so einfach geht einen String in eine Datei zu speichern. Dann kam immer so eine Meldung mit dem Heap.

    strlen? Mal gleich googlen. 😉


Anmelden zum Antworten