Fehler wenn ich in Datei schreiben will



  • Also ich schreib mir mal ne Klasse, sie ist noch nicht fertig:

    #include <fstream>
    #include <iostream>
    using namespace std;
    
    class save_to //Mit dieser Klasse kann man Variabel während der Laufzeit einfach und bequem Daten in .ini Dateien saven
    { 
    private:
    	FILE* data_list;
    	int list[100];
    	char data_input[];
    public:
    	int save_to_file()
    	{
    		cin>>data_input;
    		data_list = fopen("list.ini","r+");
    		fprintf(data_list,"%s", data_input);
    		return 0;
    	};
    };
    

    sie lässt sich fehlerfrei kompilieren...

    so jetzt mal ein Beispielcode in der sie verwendet wird:

    ...
    ...
    
    int main()
    {
        save_to save;
        cout<<"Hi: bitte input eingeben";
        save_to.save_to_file();
    }
    

    lässt sich fehlerfrei kompilieren wie gesagt... doch wenn ich den Input eingebe und return drücke kommt folgender Fehler:

    "Debug Assertion Failed

    program:.../.../.../classtest.exe
    file:fprintf.c
    Line: 56

    expression str != NULL

    For information on how your program can cause an assertion failure,
    see the C++ Documentary on asserts.

    In die Datei wird nichts geschrieben und ich weiss nicht wieso..

    Hilfe pls ^^



  • Du hast dort ein leeres char-Array angelegt - das kann auf Dauer nicht gutgehen.

    (btw, bevor du noch drüberstolperst - ich empfehle, die Datei wieder zu schließen. Oder am besten verwendest du gleich fstreams.



  • save_to::data_input hat keinen platz für input.
    Kurt



  • das char array wird doch verwendet damit ich weiss was in die datei geschrieben werden soll.

    (cin>>data_input)

    und wenn ich data_input[100] oder so schreib ändert sich auch nix, der fehler kommt immernoch



  • Hast du auch fclose(pFile) benutzt?



  • ja aber da ist kein platz für input.
    da fehlt sowas wie

    data_input = new char[100];
    

    Kurt



  • zuk erklär mal genauer wie ich es in den code integrieren soll...

    und bei fclose(file) hat sich auch nix geändert fehler is immernoch da



  • Glaube "r+" ist nicht der richtige mode wenn das file noch nicht existiert.
    "w" sollte genügen.
    so sollete es gehen

    class save_to {
    private:
        FILE* data_list;
        int list[100];
        char * data_input;
    public:
        virtual ~ save_to() { delete [] data_input; }
        int save_to_file()
        {
            data_input = new char[1000];
            cin>>data_input;
            data_list = fopen("list.ini", "w");
            fprintf(data_list,"%s", data_input);
            fclose(data_list);
            return 0;
        };
    };
    

    Kurt



  • tatsächlich es geht... es lag wohl an der zeile

    virtual ~ save_to() { delete [] data_input; }
    

    die nicht bei mir vorhanden war...

    könntest du sie bitet mal erklären?(ich weiss nicht was sie bewirkt^^)



  • Ne es lag am "r+".

    delete [] data_input;
    

    gibt den mit new allocierten speicher wieder frei.

    den speicher allokiertst du aber besser in einem konstruktor.

    class save_to {
    private:
        FILE* data_list;
        int list[100];
        char * data_input;
    public:
        save_to() { data_input = new char[1000]; }
        virtual ~ save_to() { delete [] data_input; }
        int save_to_file()    {     
            cin>>data_input;
            data_list = fopen("list.ini", "w");
            fprintf(data_list,"%s", data_input);
            fclose(data_list);
            return 0;
        };
    };
    

    Kurt



  • ok... kannst du mir eventuell noch kurz sagen wie ich ein return in nen textdatei einfüge (beispiel: fprintf(file,"\n", char); funktioniert nicht)



  • wenn schon fprintf dann

    int ch = '\n';
    fprintf(file "%c", ch );
    

    Kurt



  • Es handelt sich hier doch um ein konsolen programm oder? Dann benutze mal den Doszeilenumbruch "\r\n" anstatt von "\n".

    int ch = "\r\n";
    fprintf(file "%c", ch );
    

    müsste auch so klappen



  • Hallo

    int ch = "\r\n";
    

    nein, das wird bestimmt nicht klappen.

    bis bald
    akari



  • Chris++ schrieb:

    Es handelt sich hier doch um ein konsolen programm oder? Dann benutze mal den Doszeilenumbruch "\r\n" anstatt von "\n".

    int ch = "\r\n";
    fprintf(file "%c", ch );
    

    müsste auch so klappen

    So sicher nicht erstens kannst in einem int keine Zeichenkette ( "\r\n" ) speichern. Dann gibt "%c" bei fprintf sicher nur ein Zeichen aus und '\n' wird bei einem file das im textmodus geöffnet ist das '\n' sowieso als "\r\n" ( DOS/Windows ) ausgegeben.
    Kurt


Anmelden zum Antworten