Hilfe bei fwrite



  • Hallo ich habe folgendes Programm geschrieben:

    #include<stdio.h>
    #include<stdlib.h>
    
    main(){
           FILE *datei;
           char text[34];
           datei = fopen("acdx.txt", "w");
    
           printf("BItte geben sie einen Text ein : ");
           gets(text);
           if(text == 0){
                 fwrite(text, sizeof(text), 34, datei);
                 printf("Es wurde erfolgreich in die Datei geschrieben!");
                 }
    
           system("PAUSE");
           return 0;
           }
    

    Die Methode fwrite schreibt wenn ich jetzt zum Beispiel eingebe: Hallo die restlichen 28 Zeichen in als solche Buchstaben

    ÿÿÿÚ˜šuú ›u(} x} 8ÿ( Ÿ›u pÿ( ¨   .N ( )¤uHÿ( 4ž›uxÿ( ç@  8} x} ÿÿÿÿpÿ(  ›u @ x} àý~ˆÿ( 8@  ”ÿ( w6þu àý~Ôÿ( Bpw àý~.žw àý~  ÿ( ÿÿÿÿÝtwÉÙ ìÿ( pw @ àý~ @ àý~ Actx  3 Ü    4 |   Nï&˜ D à ºq2ó@ J Œ  [IY-¬ 2 à  ÍêÎ2à B 6 È_P8\\ ^ ¼ h D(± V | ˜  ì   | Ð   L     ì Œ   x-    Œ0 ˜   $1 Ì   ð1 ð  à2 (  3   SsHd,     Œ  ˜ , ^ ^  $ 8 C : \ W i n d o w s \ W i n S x s \ Nï& D d `  ºq2óÄ J    [IY-0 2 d   ÍêÎ2d
    B ¨
    6  È_P8à
    ^ @ h  D(±¨ V  ˜  M i c r o s o f t . W i n d o w s . S y s t e m C o m p a t i b l e l   Ð  , Ü §ûL¡$Ê  ¸
     M i c r o s o f t . W i n d o w s . S y s t e m C o m p

    Aber warum??? Ich meine ich überür+fe doch wie groß der String ist und es speichert eigentlich nur das, aber warum mehr???



  • Wenn ich jetzt bei fwrite schreibe

    fwrite(text, sizeof(text), 1, datei)

    Dann werden immer noch ein paar komische Zeichen gesetzt Hallo ÿÿÚ˜šuú ›u(Y xY 8ÿ( Ÿ›u Aber warum?????



  • gets(text);
    

    Das ist Todsünde. Was machst du wenn jemand 35 Zeichen eingibt? oder 36?

    zu der fwrite-Geschichte: der Prototyp von fwrite geht so:

    size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
    

    das heißt "schreibe nmemb Zeichen der Größe size aus ptr nach stream".
    Du sagst also praktisch deine zeichen sind 34 byte lang, schreibe 34 davon (oder später halt 1 davon)



  • gets() liest solange von der Tastatur bis ein Enter kommt.
    Dann übergibt es den String "text" - der hat eine bestimmte
    Länge die man mit strlen( text) feststellen kann. Nur diese
    Menge Zeichen sollen vermutlich in Deine Datei geschrieben
    werden.

    Probier es doch mal so:

    #include<stdio.h>
    #include<stdlib.h>
    
           main()
    {
           FILE *datei;
           char text[34];
           datei = fopen("acdx.txt", "w");
    
           printf("Bitte geben sie einen Text ein : ");
           gets(text);
           if( strlen( text) != 0){
                 fwrite( text, strlen( text), 1, datei);
                 printf("Es wurde erfolgreich in die Datei geschrieben!");
           }
    
           system("PAUSE");
           return 0;
    }
    

    Fallstricke: text packt nur 33 Zeichen plus der terminierenden "\0",
    man sollte auch nachsehen ob das fopen() geklappt hat und die Datei
    dann mit fclose() wieder schließen.

    Probier mal 🙂



  • 1. verwende gets NIE
    2. sizeof != strlen

    Du schreibst den gesamten Buffer, aber wenn die Eingabe des Benutzers nicht 33 Zeichen überschreitet, dann gibt es Felder im Array, die einen nicht uninitialisierten Wert haben.

    Mach am besten so:

    #include <stdio.h>
    #include <string.h>
    
    int main(void)
    {
        FILE *datei;
        char text[34];
        datei = fopen("acdx.txt", "w");
    
        printf("BItte geben sie einen Text ein: ");
        if(fgets(text, sizeof text, stdin))
        {   
            fwrite(text, strlen(text), 1, datei);
            printf("Es wurde erfolgreich in die Datei geschrieben!\n");
        }   
    
        fclose(datei);
        return 0;
    }
    


  • Ok danke 🙂


Log in to reply