wie benutze ich fwrite() und fread() ?



  • Ich verstehe nicht wie ich diese beiden Funktionen nutzen soll.
    Folgender Qulltext:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    struct angestellter {
    	char *name;
    	int personalnummer;
    	float gehalt;
    };
    
    int main(void){
    	FILE *datei;
    	char* nameArray[] ={"Moe","Karl","Smithers","Homer","Lanny"};
    	int pNummerArray[]={567,333,777,934,321};
    	float gehaltArray[]={2000, 5000, 3000, 3000, 4000};
    	int size = sizeof(nameArray)/sizeof(int);
    	struct angestellter *array[size];
    	struct angestellter *puffer[10];
    	int i;
    
    	for (i = 0; i < size; i++) {
    		array[i]=(struct angestellter*) malloc(sizeof(struct angestellter));
    		array[i]->name = (char*)malloc(strlen(nameArray[i]));
    		strcpy(array[i]->name, nameArray[i]);
    		array[i]->personalnummer = (int) malloc(sizeof(int));
    		array[i]->personalnummer = pNummerArray[i];
    		array[i]->gehalt = (int) malloc(sizeof(float));
    		array[i]->gehalt = gehaltArray[i];
    
    	}
    	datei = fopen("auf2.txt","w+b");
    
    	fwrite();
    	fread();
    
    	printf("%s\n",puffer[0]->name);
    
    return 0;
    }
    

    Ich möchte jetzt gerne das gesamte array in die Textdatei schreiben und dann wieder auslesen.
    Ich habe schon geguckt wie man diese Funktionen nutzen soll aber ich verstehe es nicht.

    Kann mir jemand den fwrite befehl für den obigen Quelltext zeigen?
    fread bekomme ich dann denke ich selber hin.



  • ^^doof ist der pointer *char name; in der struct. wenn der nicht wäre, könntest du machen:

    struct angestellter array[size];
    fwrite (array, sizeof(struct angestellter), size, datei);
    

    🙂



  • Ah so klappt es, da passen jetzt auch die Beispiele die ich gefunden hatte.
    Gibt es denn auch eine Möglichkeit das mit dem Pointer in der struct zu machen?



  • Erebos1988 schrieb:

    Ah so klappt es, da passen jetzt auch die Beispiele die ich gefunden hatte.
    Gibt es denn auch eine Möglichkeit das mit dem Pointer in der struct zu machen?

    Hier ist sizeof ja nicht mehr aussagekräftig (das liefert für den char-Zeiger nur 1 Byte, und wir wissen ja, dass sich dahinter noch mehr versteckt, was du schreiben willst). Da wirst du wohl nicht um eine Schleife herumkommen, in der du einzeln schreibst...



  • Dann lasse ich das in dem Fall so wie es ist, ist denke ich besser so.
    Aber gut zu wissen wie es auch anders geht.


Anmelden zum Antworten