Problem mit string einlesen?!



  • string zeichen;
    class CKunde *pt[4];
    ifstream dat_ein;
    ...
    getline(dat_ein,zeichen,' ');
    pt[0]->kundengruppe=zeichen;
    ...

    ich möchte aus einer txtdatei ein string einlesen und in das attribut(kundengruppe vom typ string) schreiben.

    fehler werden keine gemeldet, aber das programm stürzt bei dem obigen teil ab.

    weiss jmd warum?



  • Hallo

    hast du denn zu deinen Array von Pointern überhaupt gültige Instanzen zugeweisen?
    Der Codeausschnitt an sich ist syntaktisch korrekt, das problem liegt woanders.

    bis bald
    akari



  • danke!
    ehmm 😃

    ups vergessen 🙂
    ich glaub jez funz...
    wenn net meld ich mich 🤡



  • ...



  • (std::)string einlesen ist nicht ganz trivial.

    das liegt daran, dass string intern (wahrscheinlich) nur ein 2 pointer auf die zeichenketten auf dme heap speichert. willst du string jetzt in der datei speichern und machst das z.B. so

    std:: string s = "hallo welt";
    ofstream out("file.bin", ios::binary);
    out.write(reinterpret_cast<char*>(&s), s.size()));
    

    dann speichert er nur die addressen in der binären datei. wenn du dich etwa geschickter anstellst dann holst du den string mit s.c_str() da raus. aber das einlesen wird dann wieder komplexer.

    denn wenn du die pointer wieder einliest, dann zeigen diese sosntwohin aber nicht auf einen string und das gibt bei dir den fehler.

    analog dazu passieren fehler bei der nicht-binären ausgabe und eingabe...



  • willst du string jetzt in der datei speichern und machst das z.B. so

    Wer ist denn auch so dämlich, einen std::string explizit zu char* zu casten?

    analog dazu passieren fehler bei der nicht-binären ausgabe und eingabe...

    Vollkommener Quark.



  • ja?

    wenn du einen beliebigen string per << operator in eine datei schreibst, kein problem.
    und wie holst du diesen gesamten string wieder zurück?



  • Skym0sh0 schrieb:

    ja?

    wenn du einen beliebigen string per << operator in eine datei schreibst, kein problem.
    und wie holst du diesen gesamten string wieder zurück?

    Anscheinend hast du keine Ahnung, wie man Strings (oder generell Arrays) serialisiert, oder?



  • nein. ich sag ja auch nicht, dass es keine möglichkeit gibt. ich sage nur, dass es nicht trivialerweise mit fout << str; und fin >> str; geht... (natürlich unter der prämisse dass beide operatoren nicht überladen wurden)



  • Skym0sh0 schrieb:

    nein. ich sag ja auch nicht, dass es keine möglichkeit gibt. ich sage nur, dass es nicht trivialerweise mit fout << str; und fin >> str; geht... (natürlich unter der prämisse dass beide operatoren nicht überladen wurden)

    Nö, wenn das für alle Strings gehen soll hast du Recht; dann geht das so nicht.


Anmelden zum Antworten