1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

fwrite

  • SnakE!
  • 8. Januar 2009 um 16:55
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • SnakE!
    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
  • Plantschkuh!
    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.

  • SnakE!
    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 .

  • Plantschkuh!
    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?

  • SnakE!
    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 :D
    oder bin ich voll verblödet
    und ja informations protokolle sind nicht meine schwerpunkte :D
    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

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

  • Plantschkuh!
    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 :D


    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.

  • SnakE!
    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 .

    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.

  1. Datenschutzerklärung
  2. Impressum