1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

fwrite

  • SnakE!
  • 8. Januar 2009 um 16:55
  • Unerledigt
  • SnakE!
    3
    SnakE!
    Mitglied
    Punkte
    85
    Beiträge
    13
    • 8. Januar 2009 um 16:55
    • #1

    hallo ich bin dabei C mal durch zu nehmen
    so hir die frage :
    fwrite wenn der argument sizeof Struct ist funktionirt es nicht so wie sizeof char
    also habe probleme im file Integer werte einzufügen .
    kann mir einer einen bespiel bringen das ich es verstehe ?

    der

    Zitat

    #include <stdio.h>

    int main() {
    FILE *sourceFile;
    FILE *destinationFile;
    char *buffer;
    int n;

    sourceFile = fopen("file.c", "r");
    destinationFile = fopen("file2.c", "w");

    if(sourceFile==NULL) {
    printf("Error: can't access file.c.\n");
    return 1;
    }
    else if(destinationFile==NULL) {
    printf("Error: can't create file for writing.\n");
    return 1;
    }
    else {
    n = fread(buffer, 1, 1000, sourceFile); /* grab all the text */
    fwrite(buffer, 1, n, destinationFile); /* put it in file2.c */
    fclose(sourceFile);
    fclose(destinationFile);

    destinationFile = fopen("file2.c", "r");
    n = fread(buffer, 1, 1000, destinationFile); /* read file2.c */
    printf("%s", buffer); /* display it all */

    fclose(destinationFile);
    return 0;
    }
    }

    Alles anzeigen

    Leben ist die Suche des Nichts nach dem Etwas. (Christian Morgenstern) und nur wer es erreicht weis er ist nichts.

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    Punkte
    6.173
    Beiträge
    1.181
    • 8. Januar 2009 um 17:12
    • #2

    Dein Problem ist nicht fwrite. Dein Problem ist, dass du "buffer" als Pointer deklarierst, aber nicht initialisierst. Ein Pointer ist nicht der Speicherbereich, in den du schreiben willst; ein Pointer ist ein Zeiger auf einen Speicherbereich. Und zwar auf einen Speicherbereich, den du erstmal zuweisen mußt. Etwa so:

    Code
    buffer = malloc(1000);


    Rückgabewert überprüfen nicht vergessen. Wenn die Größe wie hier aber ohnehin konstant ist, ist es meist sinnvoller, gleich ein Array zu verwenden.

    Was dein Problem mit sizeof ist, könnte man am besten sehen, wenn du ein Beispiel mit sizeof gepostet hättest. Dein Beispiel ist soweit funktionsfähig, wenn der Speicher für buffer korrekt angelegt wird.

    *plantsch*

  • SnakE!
    3
    SnakE!
    Mitglied
    Punkte
    85
    Beiträge
    13
    • 8. Januar 2009 um 18:21
    • #3
    Zitat


    struct bsp{
    char txt[10];
    };

    int main(){

    FILE *p;
    struct bsp l;
    strcpy(l.txt,"aaaaa");
    p=fopen("a","w");
    if(!p)
    printf("ERROR\n");
    fwrite(&l,sizeof(struct bsp),1,p);
    }

    Alles anzeigen

    wenn ich im dem struct nocht ein Int mir einlesen will geht es nicht .

    Leben ist die Suche des Nichts nach dem Etwas. (Christian Morgenstern) und nur wer es erreicht weis er ist nichts.

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    Punkte
    6.173
    Beiträge
    1.181
    • 8. Januar 2009 um 19:39
    • #4
    Zitat von SnakE!

    wenn ich im dem struct nocht ein Int mir einlesen will geht es nicht .


    Sehr informativ.

    Du hast dich übrigens vertippt: Der Tag für Code heißt CODE, nicht QUOTE.

    C
    #include <stdio.h>
    #include <string.h>
    
    
    struct bsp {
        char txt[10];
        int n;
    };
    
    
    int main(void) {
        FILE *p;
        struct bsp l, r;
    
        strcpy(l.txt, "aaaaa");
        l.n = 42;
    
    
        p = fopen("foofile", "w");
        fwrite(&l, sizeof (struct bsp), 1, p);
        fclose(p);
    
    
        p = fopen("foofile", "r");
        fread(&r, sizeof (struct bsp), 1, p);
        fclose(p);
    
    
        printf("l.txt = %s, r.txt = %s\nl.n = %d, r.n = %d\n",
                l.txt, r.txt, l.n, r.n);
    
    
        return 0;
    }
    Alles anzeigen

    Output:

    Code
    l.txt = aaaaa, r.txt = aaaaa
    l.n = 42, r.n = 42

    Fragen?

    *plantsch*

  • SnakE!
    3
    SnakE!
    Mitglied
    Punkte
    85
    Beiträge
    13
    • 8. Januar 2009 um 19:53
    • #5

    sehr gut danke nur wiso ist im file selbst nicht mehr die zahl drinn ? oder sind dass codes die ich nicht verstehe ich dachte im file muss die zahl 42 sein oder so :grinning_squinting_face:
    oder bin ich voll verblödet
    und ja informations protokolle sind nicht meine schwerpunkte :grinning_squinting_face:
    EDIT : mein freund meint ich sag ein satz und verlangge das er alles sagt
    EDIT:
    wenn ich jetzt

    C
    #include <stdio.h>
    #include <string.h>
    
    
    struct bsp {
        char txt[10];
        int n;
    };
    
    
    int main(void) {
        FILE *p;
        struct bsp l, r;
       /*
        strcpy(l.txt, "aaaaa");
        l.n = 42;
    
    
        p = fopen("foofile", "w");
        fwrite(&l, sizeof (struct bsp), 1, p);
        fclose(p);
    */
    
    
        p = fopen("foofile", "r");
        fread(&r, sizeof (struct bsp), 1, p);
        fclose(p);
    
    
        printf("l.txt = %s, r.txt = %s\nl.n = %d, r.n = %d\n",
                l.txt, r.txt, l.n, r.n);
    
    
        return 0;
    }
    Alles anzeigen

    bei zweiter ausführung auskommentieren
    da es ja denn file gibt kommt

    Code
    l.txt = ��r, r.txt = aaaaa
    l.n = 8732660, r.n = 42

    Leben ist die Suche des Nichts nach dem Etwas. (Christian Morgenstern) und nur wer es erreicht weis er ist nichts.

    Einmal editiert, zuletzt von SnakE! (8. Januar 2009 um 20:07)

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    Punkte
    6.173
    Beiträge
    1.181
    • 8. Januar 2009 um 20:05
    • #6
    Zitat von SnakE!

    sehr gut danke nur wiso ist im file selbst nicht mehr die zahl drinn ? oder sind dass codes die ich nicht verstehe ich dachte im file muss die zahl 42 sein oder so :grinning_squinting_face:


    Die Zahl wird von fwrite nicht als Text ins File geschrieben, sondern in der internen Binärdarstellung deines Computers. Wenn ich mir das File als Text ausgeben lasse, kriege ich "aaaaa*". Das sind zunächst die fünf a-Zeichen aus dem String, dann unsichtbar einige Bytes mit dem Wert 0, dann kommt das Zeichen '*', das hat im ASCII-Zeichensatz genau den Wert 42. Die Zahl ist also da, man muß nur wissen, wie man sie ausliest :) Genau das macht fread für dich.

    *plantsch*

  • SnakE!
    3
    SnakE!
    Mitglied
    Punkte
    85
    Beiträge
    13
    • 8. Januar 2009 um 20:13
    • #7

    noch die letzte frage und das war besser alls 2 stunden VL
    EDIT : sorry sorry nicht antworten
    das sind random zahlen :D#
    ich dachte es ist wie fscanf . fprintf wo dann im file das selbe zusehen war .

    Leben ist die Suche des Nichts nach dem Etwas. (Christian Morgenstern) und nur wer es erreicht weis er ist nichts.

    3 Mal editiert, zuletzt von SnakE! (8. Januar 2009 um 20:23)

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung