Programm stürzt mitten drin ab!



  • Hi,
    ich habe mich dran versucht, eine einfache Datenbank zu programmieren.
    Jedoch scheint bei der GET-Funktion des Objektes scheint irgentwie etwas falsch zu laufen... Denn nach der Änderung auf unbestimmte chars von "tmp" will ich die zuvor gespeicherten Attribute wieder laden, allerdings bricht dann immer das Prog ab.
    Kann mir jemand nen Noob-Tip geben? Oder eventuell eine abänderung der Codes posten? Wäre echt super, bin totaler Neueinsteiger in OOP und komm damit noch nich so klar.
    Hier der Code:

    *#include <iostream>
    #include <stdlib.h>

    using namespace std;

    class Person // Datenklasse
    { private:

    int id;
    char* vorname;
    char* nachname;

    public:

    int get_id() {return id;} // GET-Funkionen
    char* get_vor() {return vorname;}
    char* get_nach() {return nachname;}

    void set_id(int nummer) {id = nummer;} // SET-Funktionen
    void set_vor(char* vor) {vorname = vor;}
    void set_nach(char* nach) {nachname = nach;}
    };

    int main(int argc, char argv[])
    {
    int nummer;
    char
    vorname;
    char* nachname;
    char* tmp;

    Person p001;

    printf ("\nPersonendaten bearbeiten");
    printf ("\n========================");
    printf ("\nPersonl-Nummer: 001");
    printf ("\nVorname: ");
    scanf ("%s",&vorname);
    printf ("\nNachname: ");
    scanf ("%s",&nachname);
    p001.set_vor(vorname);
    p001.set_nach(nachname);
    printf ("\Daten uebertragen....");

    vorname=tmp; // unbestimmt ändern
    nachname=tmp;
    printf ("\n\n %s :: %s \n\n",vorname, nachname);

    vorname=p001.get_vor(); // Daten abrufen
    nachname=p001.get_nach();
    printf ("\n\n %s :: %s \n\n",vorname, nachname);
    system("PAUSE");
    return 0;
    }*



  • Autsch, da ist so vieles falsch, dass sollte man komplett neuschreiben.

    Sorry, aber eh ich hier die ganzen Fehler aufzähle, empfehle ich dir, die Klasse string zu benutzten. Das sollte die meisten, wenn nicht alle Fehler beheben.

    So gehts jedenfalls nicht. Denke einmal genau darüber nach, was ein char* eigentlich ist, und was es heißt, ihn als Parameter zu übergeben.



  • Ja... char* wäre normalerweise n Pointer, aber ich kenne sonst keine Möglichkeit Strings einzulesen. Wenn ich statt des * [20] oder so dahinterschreibe, macht mein Compiler Fehlermeldungen ohne Ende...



  • hm also als Tipps:

    wenn ein Programm nicht funktioniert sollte man den Debugger bemühen. Der bringt meist Aufschluss.

    Tipp: Zeiger setzt man nicht auf unbekannt, sondern auf NULL

    ansonsten wie schon gesagt wurde: benutze lieber string anstatt char*

    Ergänzung: damit du mal siehst was du falsch gemacht hast

    "char* Nachname;" ist nur ein Zeiger der auf ein char zeigt.

    Wenn du Namen einlesen willst brauchst du ein Feld von Charactern, also z.B.
    "char Nachname[20];"
    nur "Nachname" ist jetzt der Zeiger auf das erste Element, also "&Nachname[0]"

    am besten ein Buch lesen oder Tutorials nutzen und dann letztendlich die string-klasse dafür benutzen 😉



  • JustiZe schrieb:

    Ja... char* wäre normalerweise n Pointer, aber ich kenne sonst keine Möglichkeit Strings einzulesen.

    Obwohl Bill Gates damals keine Fenster in Programmen kannte hat er solange bei den anderen MAC,Commodore,etc. abgeschaut bis er es kannte und die Fenster eingebaut hat.

    Das kann man auch auf dich umsetzen.
    Wenn du es nicht kennst dann suche danach.
    Alleine die Annahme das es keine Möglichkeit für std::string gibt ist absurd.



  • Ja... danke erstmal für die Antworten.
    Mit char nachname[30] hab ich es auch schon versucht. aber spätestens wenn ich sowas als übergabeparameter an ein objekt habe, meckert mein Conmpiler.
    Hat vielleicht sonst mal jemand ein ganz billiges simples Beispiel von Strings einlesen und ausgeben per OOP ?



  • JustiZe schrieb:

    Ja... danke erstmal für die Antworten.
    Mit char nachname[30] hab ich es auch schon versucht. aber spätestens wenn ich sowas als übergabeparameter an ein objekt habe, meckert mein Conmpiler.
    Hat vielleicht sonst mal jemand ein ganz billiges simples Beispiel von Strings einlesen und ausgeben per OOP ?

    Hallo,
    Die Klasse std::string wird in jedem (guten) C++-Buch beschrieben.

    Trotzdem hier ein absolutes Minimalbeispiel (weitere Methoden und deren Funktionsweise mit Beispiel von std::string findest du hier).

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
            string str; // Objekt str der Klasse std::string anlegen. (Ich setze hier voraus, dass du die using-direktive std; gesetzt hast.
    
            cin >> str; // Einen Text einlesen (bis zum ersten Blank).
            cout << str << "\n\n"; // Den eben eingelesenen Text ausgeben.
    
            cin.ignore(std::cin.rdbuf()->in_avail()); // Puffer leeren.
            //cin.get(); // Das beim g++ noch hinzufügen. (Ist hier glaube ich nicht standardkonform...)
    
            getline(cin, str); // Eine Text-Zeile einlesen.
    
            // jedes Element einzeln ausgeben
            for(unsigned int i = 0; i < str.length(); ++i)
                    cout << str[i]; // alternativ auch die Methode at(i), welche zusätzlich eventuell noch exceptions wirft.
    
            if(str.find("Hello C++!") != string::npos)
                    cout << "\n Der String \'Hello C++!\' wurde in \'str\' gefunden\n";
            else
                    cout << "\n Der String \'Hello C++!\' wurde in \'str\' NICHT gefunden\n";
    
            return 0;
    }
    

    Desweiteren sind die Methoden replace(), insert(), erase(), substr(), append(), c_str() interessant. Ich verweise hier auf http://www.cppreference.com/cppstring. 😉

    Caipi


Anmelden zum Antworten