[Hilfe] löschfunktion in datenverwaltungsliste implementieren



  • gut danke,
    als nächstes kommt noch eine lesefunktion, dann sollte das programm komplett sein.
    allerdings habe ich im moment keine lust mehr weiter zu machen.



  • wenn ich das ganze laden möchte, wäre es wahrscheinlich sinnvoller, das ganze mit fwrite zu speichern oder?

    aber was muss ich da als länge angeben?

    mein ansatz sieht so aus:

    void speichern(FILE*file,person*person_anfang)
    {
    	if((person_anfang->next)!=0)
    	{
    	fwrite(person_anfang,sizeof(person),1,file);
    	speichern(file,person_anfang->next);
    	}
    	else
    	printf("ende erreicht\n");
    }
    

    was muss ich bei der länge reinschreiben? habe jetzt einfach mal 1 gemacht, ist das dann 1 byte? woher weiss ich wie viel byte ich für mein struct brauche?

    v.a. wie öffne ich das ganze mit fread wieder und zwar so, dass mir der anfangspointer auf die gelesene liste zurück gegeben wird??

    lg



  • Der Ansatz ist erstmal richtig, aber rekursiv, das führt selbst bei einer geringen Stackbelastung wie hier bei größeren Datensatzanzahlen zu Stackproblemen.

    sizeof(person)
    

    liefert dir die Größe des Typs "person" in Bytes, ein Blick in dein Lehrbuch wäre hilfreich.
    Nach dem fwrite-Speichern liegen in der Datei auch dynamische Werte, d.h. die Zeiger, d.h. diese musst du beim Lesen wieder korrekt setzen, da sie höchstwahrscheinlich beim nächsten Programmaufruf ungültig sind.



  • Wutz schrieb:

    Der Ansatz ist erstmal richtig, aber rekursiv, das führt selbst bei einer geringen Stackbelastung wie hier bei größeren Datensatzanzahlen zu Stackproblemen.

    sizeof(person)
    

    liefert dir die Größe des Typs "person" in Bytes, ein Blick in dein Lehrbuch wäre hilfreich.
    Nach dem fwrite-Speichern liegen in der Datei auch dynamische Werte, d.h. die Zeiger, d.h. diese musst du beim Lesen wieder korrekt setzen, da sie höchstwahrscheinlich beim nächsten Programmaufruf ungültig sind.

    🙄


Anmelden zum Antworten