2012-04-15 6 views
0

Mit dem folgenden Code versuche ich 4 Bytes aus einer Datei zu lesen:Fehler mit fseek

FILE *f 

uint32_t read_program(int A) 
{ 
    long i; 
    uint32_t strofprog; 
    uint8_t tmp; 
    i = 4*A; 
    fseek(f,i,0);// set a position in file 
    if((tmp = getc(f)) != EOF) 
    { 
     while((i%(4*A)) < 4) 
     { 
      fseek(f, i, SEEK_SET); 
      tmp = getc(f); 
      strofprog = tmp; 
      strofprog <<= 8; 
      i++; 
     } 
     return strofprog; 
    } 
    else 
    { 
     fclose(f); 
     return -1; 
    }; 
} 

Allerdings, wenn ich es laufen, kommt es zu dem folgenden Fehler:

main.c: In function ‘read_program’: 
main.c:77: error: incompatible type for argument 1 of ‘fseek’ 
/usr/include/stdio.h:722: note: expected ‘struct FILE *’ but argument is of type ‘FILE’ 

Was mache ich falsch, und wie kann ich es beheben?

+4

Ist das der echte Code? Überprüfen Sie die Erklärung von "f". – littleadv

+0

ja. Die Deklaration von f ist FILE * f; dann f = fopen ("file.bin", "r"); – Ivan

+1

'if ((tmp = getc (f))! = EOF)' ist nur korrekt, wenn 'tmp' als' int' deklariert ist! Auch Ihre innere Schleife prüft nicht, ob 'tmp'' EOF' ist entweder – Anthales

Antwort

2

Linie 85 in der Paste:

fseek(*f,i,0);// set a position in file 

wie @unwind vermutet.

Verwandte Themen