Integer werte in eine Datei schreiben.



  • Ich will eine Datei mit zwei integer Werten und m Zeilen speichern. Die Werte kommen aus einem Array

    fh=open...
    for...
    sprintf(str,"%d %d\n\0", array[1],array[2]);
    write (fh,str,sizeof(str))
    

    klappt leider nicht, da vor den zwei Integerwerten Müll gespeichert wird. Nur die erste Zeile ist so wie sie soll.

    char str[100]
    


  • das \0 im string ist ueberfluessig und bewirkt dort rein garnichts. \0 haben in stringliteralen NIE was verloren.

    sizeof() auf arrays machst du bitte nicht mehr.

    write und open sind keine c funktionen. fwrite und fopen heisst das.

    ausserdem mischst du text und binaer in einer datei nicht (machst du naemlich mit write(zahlenarray) und nem string).



  • c.rackwitz schrieb:

    write und open sind keine c funktionen. fwrite und fopen heisst das.

    open(), read(), write(), ... gehen auch. das ist posix-kram



  • c.rackwitz schrieb:

    sizeof() auf arrays machst du bitte nicht mehr.

    Genau - sizeof() liefert dir nämlich in dem Fall konstant 100, also wird hinter jeder Textzeile der Datenmüll in die Datei geschrieben, mit dem dein Array initialisiert wurde. Die Länge der tatsächlich verfügbaren Textdaten erhältst du am ehesten mit strlen().

    (PS: Warum schreibst du eigentlich nicht direkt mit fprintf()?)



  • Hi, dank Euch erst mal. Das \0 war noch ein Überbleibsel von Tests, hatte und habe ich nicht mehr drin. Das das Problem von sizeof kommt, habe ich gemerkt, da es bei kleinenen Arrays funktioniert hat. Leider akzeptiert die write-Funktion keine strlen(str). weiß nicht wieso :(. Wie würde das mit fprintf aussehen?



  • "Leider akzeptiert die write-Funktion keine strlen(str)."

    Wie kommst du darauf?
    sizeof und strlen liefern beide den Datentyp size_t zurück, daher sollte es eigentlich keine Probleme geben.

    fprintf(file, "%d %d\n", int1, int2);



  • hm, bei mir gabs einen Fehler, konnte es mir auch nicht vorstellen. Werde es heute Abend noch mal testen.



  • net schrieb:

    c.rackwitz schrieb:

    write und open sind keine c funktionen. fwrite und fopen heisst das.

    open(), read(), write(), ... gehen auch. das ist posix-kram

    c.rackwitz hat recht :), die elementaren E/A-Funtktionen wie open, read,
    write usw. sind nicht Bestandteil von Ansi C, wohl aber von POSIX.1.
    und in der Headerdatei unistd.h definiert.
    Sie sind nicht gepuffert.Das heißt der Programmierer muß sich darum "kümmern".

    Die Standard-E/A-Funktionen fopen, fread, fwrite usw. sind in der
    stdio.h definiert und arbeiten mit eigenen Puffern.
    Diese Funktionen sind von Ansi C vorgeschrieben und somit auf jedem
    OS verfügbar.

    Viele Grüße
    Thomas



  • thknopp schrieb:

    ...Sie sind nicht gepuffert.Das heißt der Programmierer muß sich darum "kümmern".

    aber eingebaute puffer sind nicht immer gut 😉



  • und in dem fall auch irrelevant.

    nun zu den fehlern:
    * sizeof() ist falsch. strlen() heisst das. erkundige dich, was die funktionen machen und warum sizeof() hier falsch ist.
    * \0 am ende eines stringliterals ist falsch. grund: jedes stringliteral wird mit \0 abgeschlossen, das musst du nicht noch angeben.
    * haettest du statt open/write gleich fopen/fwrite benutzt, waerst du auf fprintf gestossen und haettest dir die sprintf/(f)write zeilen sparen koennen

    noch fragen?


Anmelden zum Antworten