In Datei schreiben



  • Hi, ich wollte mit folgendem Programm "hallo" in eine Textdatei schreiben.

    #include <fstream>
    using namespace std;
    
    string out(char buf[]){
    
           string wort;
           wort=buf;
           return wort;     
    }
    
    int main()
    {
        char buf[5];
    
        buf[0]='h';
            buf[1]='a';
                buf[2]='l';
                    buf[3]='l';
                        buf[4]='o';
    
        fstream f;
        f.open("eingabe.txt", ios::out);
        f << out(buf) ;
        f.close();
    }
    

    Drin steht dann allerdings

    hallo8=
    

    keine Ahnung, woher das "8=" kommt.

    Eine andere Möglichkeit, aus einem Char-Array in eine Datei zu schreiben, ist mir nicht eingefallen.

    gruß, andre



  • Die Schreibfunktion muss ja wissen, wann dein String zu Ende ist.
    Üblicherweise wird der String daher mit einem Null-Byte abgeschlossen.

    Mache das Array also ein Byte länger und trage dafür Sorge, dass hinten ein Byte mit dem Wert Null steht.



  • Hallo fehlt vieleicht die Terminierende Null im String.
    Versuche mal strcpy(buf,"Hallo");
    und string.h includieren



  • darkfire00 schrieb:

    Hallo fehlt vieleicht die Terminierende Null im String.
    Versuche mal strcpy(buf,"Hallo");
    und string.h includieren

    Hierbei muss man aber beachten, dass in seinem Quelltext nur 5 Bytes reserviert wurden. StrCpy schreibt inklusive dem Abschluss aber 6 davon.



  • @darkfire: bring ihm nicht so nen Mist bei ... cstring würde der Header heißen -.-

    #include <fstream>
    
    int main()
    {
        char buf[6] = {'H', 'a', 'l', 'l', 'o', 0 };   
    
        std::ofstream file_stream("output.txt", std::ios::out);
        if (!file_stream)
            return 0;
    
        file_stream << buf << std::endl;
        file_stream.close();
    }
    


  • Danke



  • #include <fstream>
    
    int main()
    {
        char buf[] = "Hallo";  
    
        std::ofstream file_stream("output.txt", std::ios::out);
        if (!file_stream)
            return 0;
    
        file_stream << buf << std::endl;
        file_stream.close();
    }
    

    😉



  • #include <fstream>
    #include <string>
    
    int main()
    {
        std::string str = "Hallo";  
    
        std::ofstream file_stream("output.txt", std::ios::out);
        if (!file_stream)
            return 0;
    
        file_stream << str << std::endl;
        file_stream.close();
    }
    

    😉



  • andre666 schrieb:

    Hi, ich wollte mit folgendem Programm "hallo" in eine Textdatei schreiben.
    ...

    Dann tu das doch einfach:

    #include <fstream>
    
    int main()
    {
       std::ofstream f("eingabe.txt"); // ich würde es ja "ausgabe" nennen
       f << "Hallo";
       return 0; // braucht's eigentlich nicht bei main, finde ich aber konsistenter
    }
    

    😉

    Gruß,

    Simon2.



  • Ich denke damit hat Simon2 gewonnen.



  • Shinja schrieb:

    Ich denke damit hat Simon2 gewonnen.

    Aus Niederlagen lernt man mehr, als aus Siegen 😉



  • #include <fstream>
    
    int main()
    {
        std::ofstream file_stream("output.txt", std::ios::out); 
        if (!file_stream)
            return 0;
        file_stream << "Hallo" << std::endl;
        file_stream.close();  
    }
    

    ...



  • (D)Evil schrieb:

    #include <fstream>
    
    int main()
    {
        std::ofstream file_stream("output.txt", std::ios::out); 
        if (!file_stream)
            return 0;
        file_stream << "Hallo" << std::endl;
        file_stream.close();  
    }
    

    ...

    Nur zur Anmerkung: ein ofstream braucht kein std::ios::out und geclosed wird auch automatisch. 😉
    Aber nachzusehen, ob das Öffnen geklappt hat, ist keine schlechte Idee (muss gestehen, dass ich es aus Gründen der Übersichtlichkeit weggelassen habe).

    Gruß,

    Simon2.



  • Simon2 schrieb:

    Aber nachzusehen, ob das Öffnen geklappt hat, ist keine schlechte Idee (muss gestehen, dass ich es aus Gründen der Übersichtlichkeit weggelassen habe).

    Ja, aber das kann man drastisch kürzen:

    #include <fstream>
    
    int main() {
        std::ofstream f("datei");
        return not f or f << "Hallo";
    }
    

    😉

    Ohne Test geht es natürlich noch kürzer:

    #include <fstream>
    
    int main() { std::ofstream("datei") << 42; }
    

    Win! 😃



  • MIT Test:

    #include <fstream>
    int main() { return !(std::ofstream("datei") << 42); }
    

    😃



  • Hi,

    ich nehme meinen Einwand zurück: Den Test braucht's doch nicht. 😃

    Gruß,

    Simon2.


Log in to reply