Fread



  • ganz einfache frage

    int *x_size = 0;
    fread(x_size,sizeof(int),1,file_pointer);
    

    wirft das nen fehler wenn im file nen char steht ?^^



  • Einfache Antwort:

    Das gibt immer einen Fehler.

    int *x_size = 0;
    size_t anz;
    printf("Lese anStelle %p\n", x_size); //  :warning: 
    anz = fread(x_size,sizeof(int),1,file_pointer); 	
    
    printf("gelesen: %lu\n", anz);
    


  • und wenn dieser fehler auftaucht sollte anz ungleich der anzahl der gelesenen "zeichen" sein, also ungleich 1 oder ?



  • weils mir grade, ich weis net warum auch hierbei den fehler wirft.

    FILE *file_pointer  = fopen(filename, "rb");
    

    error: ‘file_pointer’ undeclared (first use in this function)

    ????



  • Sappel schrieb:

    und wenn dieser fehler auftaucht sollte anz ungleich der anzahl der gelesenen "zeichen" sein, also ungleich 1 oder ?

    Der Fehler ist, das du x_size mit 0 initialisierst.

    x_size ist ein Zeiger auf int und den setzt du damit auf NULL.

    Was du meinst ist:

    int x_size = 0;
    size_t anz;
    printf("Lese anStelle %p\n", &x_size); //  :warning:
    anz = fread(&x_size,sizeof(x_size),1,file_pointer);    
    
    printf("gelesen: %lu\n", anz);
    

    Und da gibt es keinen Fehler, wenn du weniger daten liest. anz ist aber ungleich sizeof(x_size). Dadurch kannst du das feststellen.



  • Sappel schrieb:

    weils mir grade, ich weis net warum auch hierbei den fehler wirft.

    FILE *file_pointer  = fopen(filename, "rb");
    

    error: ‘file_pointer’ undeclared (first use in this function)

    ????

    Du hast vermutlich einen C89-Compiler, der Variablendeklarationen nur am Scope-Anfang erlaubt. Also pack die Zeile einfach ein wenig nach oben an den Anfang der Funktion.



  • @matze sry ich hätts vielleicht dazuschreiben sollen, ja ich hab den compiler, das geile is dran, das is die erste zeile^^

    int readConfig(char *filename, int *x_size, int *y_size, char *prompt)
    {
      FILE *file_pointer  = fopen(filename, "rb");
      char *magic = NULL;
    
    .
    .
    .
    .
    

    EDIT: ich trottel 😛 ich hab aus versehen für eine neue Funktion ein Makro definiert, welches FILE heist 😛 jetzt hat er hier nicht den Variablentyp sondern das Makro genommen, was dann im code natürlich keinen sinn mehr ergibt *move kopf to tisch*



  • Makros 😃 der Anfang allen Übels :p

    #include <stdio.h>
    
    char foo();
    #define foo main
    
    int foo(){
    	#undef foo
    	#define main foo
    
    	printf("foo\n");
    	printf("result %i\n", main());
    	return 0;
    }
    
    char main() {
    	printf("main\n");
    	return 'A';
    }
    

    oder so:

    #include <stdio.h>
    
    char foo();
    #define foo main
    
    int foo(){
    #undef foo
    	printf("foo\n");
    	printf("result %i\n", foo());
    	return 0;
    }
    
    #define main foo
    char main() {
    	printf("main\n");
    	return 'A';
    }
    


  • HighLigerBiMBam schrieb:

    ...

    😃 👍


Log in to reply