Ergebnis 1 bis 8 von 8
  1. #1
    Stanley Jobson Avatar von sp33dwalker
    Registriert seit
    18.09.2008
    Beiträge
    688

    Standard Hilfe bei Klassenprogramm

    Hey,
    Ich mache gerade eine Übungsaufgabe in C++.Bin schon fast fertig jedoch hab ich da ein kleines Problem.

    Den Namen kopiere ich mit strncpy, jedoch weiss ich jetzt nicht wie ich noch den Wohnort in den Speicher kopiere.Habs mit noch einem strncpy versucht funzt aber nicht.Hier der code:


  2. #2
    Der `Toastflüsterer` Avatar von AlterHacker
    Registriert seit
    27.09.2008
    Beiträge
    690

    Standard

    "Habs mit noch einem strncpy versucht funzt aber nicht."

    Was funzt daran nicht?

    Security is an illusion.
    Cheater : 8=o
    Normaluser : 8=======o
    Ich : 8================o

    BM: (4|2|0)

  3. #3
    Stanley Jobson Avatar von sp33dwalker
    Registriert seit
    18.09.2008
    Beiträge
    688

    Standard

    strncpy
    ( ort, ort, sizeof(ort)-1 );
    ort[sizeof(ort)] = '\0';


    ich habs so probiert ,bekomm danach aber 4 errors

  4. #4
    Der `Toastflüsterer` Avatar von AlterHacker
    Registriert seit
    27.09.2008
    Beiträge
    690

    Standard

    strncpy(this->ort, ort, sizeof(ort)-1);
    this->ort[sizeof(ort)] = 0;

    Das schon versucht? (this->)


    EDIT:
    Und "Ich bekomme dann 4 errors, wie wäre es wenn du uns die mal hier genauer darstellst?

    Security is an illusion.
    Cheater : 8=o
    Normaluser : 8=======o
    Ich : 8================o

    BM: (4|2|0)

  5. #5
    Stanley Jobson Avatar von sp33dwalker
    Registriert seit
    18.09.2008
    Beiträge
    688

    Standard

    das funzt jedoch zeigt er mir dann bei wohnort nur "Pim" an

  6. #6
    Der mit Anatidaephobie Avatar von blackberry
    Registriert seit
    11.07.2008
    Beiträge
    2.350

    Standard

    Das hier funktioniert (deine Art einzurücken ist GRAUENHAFT!)

    Code:
    #include <iostream>
    
    
    using namespace std;
    
    class person
    {
        private:
            char name[30];
            int alter;
            char ort[50];
        public:
            void erzeuge(const char* n = "Waise", unsigned int a = 0, const char* ort = "nirgends");
            void ausgeben(void);
    };
    
    int main(void)
    {
        person mensch;
        int wahl;
        
        auswahl:
        
        cout << "Personenverwaltung - 0.1\n";
        cout << "Was moechten sie tun?\n";
        cout << "1) Anzeigen 2) Erzeugen\n";
        cin >> wahl;
        
        switch (wahl)
        {
            case 1:
                mensch.ausgeben();
                break;
            case 2:
                mensch.erzeuge("Tom", 8, "Pimmelhausen"); 
                system("cls");
                cout << "Tom wurde erzeugt\n";
                goto auswahl;
        }   
        system("PAUSE");
    }
    
    void person::erzeuge(const char* n, unsigned int a,const char* ort)
    {
        strncpy(name, n, sizeof(name) - 1);
        // durch die gleiche Benennung des Klassen-Attributes und des
        // Parameters entsteht eine Namenskollision.
        // Wir arbeiten mit dem this-Zeiger um das Klassen-Attribut
        // ansprechen zu können.
        strncpy(this->ort, ort, sizeof(this->ort) - 1);
        // nicht notwendig:
        //name[sizeof(name)] = '\0';
        alter = a;
    }
    
    void person::ausgeben ( void )
    {
        cout << name << " " << alter << " Jahre (";
        cout << "Wohnort : " << ort << ")\n";
    }
    Der Fehler von AlterHacker liegt hier:
    strncpy(this->ort, ort, sizeof(ort)-1);
    ort ist hier ein Zeiger auf einen char.
    Der Zeiger an sich ist 4 Byte groß.
    Daraus folgt:
    strncpy(this->ort, ort, 4-1);
    strncpy(this->ort, ort, 3);

    Ansonsten:
    this->ort[sizeof(ort)] = 0;
    auch hier feht wieder das this-> vor dem rot markieren ort.
    Außerdem wird das setzen eines 0-Bytes bereits von strncpy erledigt.
    Diese Code-Zeile ist somit redundant.


    mfG. BlackBerry

    PDFTT cr3w a.E. — ReiDC0Re, lindor, Sera, berry
    please do feed the trolls crew and elk
    Ehrenwerte Mitglieder im Ruhestand: OpCodez, SFX.
    "Was sich blackberry gerade denkt" — Vorsicht! Frei laufender Wahnsinn!
    Zitat von fuckinghot19: "PS: Blackberry ist auf FH der Trollkönig ^^."
    An dieser Stelle danke ich all meinen Fans und Hatern gleichermaßen ^.^

  7. #7
    Stanley Jobson Avatar von sp33dwalker
    Registriert seit
    18.09.2008
    Beiträge
    688

    Standard

    Vielen Dank an alle

  8. #8
    Meister des Grills Avatar von c4pone
    Registriert seit
    08.11.2006
    Beiträge
    167

    Standard

    an deiner stelle würde ich einen konstruktor schreiben der den variablen einen default wert zuweist und vielleicht solltest du dir auch ma den this-> pointer anschauhn

    gruß c4pone
    Zitat Zitat von Barney Stinson
    “Think of me like Yoda, but instead of being little and green I wear suits and I'm awesome. I'm your bro—I'm Broda!”

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •