展开和函数中的结构指针

问题描述:

我正在读取位图程序。事情是我写了所有的东西,需要将代码分发给函数。我正在使用fread使用标准结构地址来读取信息,但是我离开函数后无法访问信息。所以我通过指针尝试了adressing结构,但fread不让我这样做。我已经读过,fread并不是通过指针设计的。但我无法确认。这是我的问题。我如何通过指针来做到这一点?为什么我的第一次尝试不起作用?展开和函数中的结构指针

void odczyt_pliku_bmp(struct FileHeader fheader, struct MapHeader mheader, char *nazwa) { 
    FILE *fp1; 
    fp1 =fopen(nazwa,"rb"); 

    if(fp1) 
    { 
     fread(&fheader.sygnatura,2,1,fp1); 
     //... 


     printf("%d\n",fheader.sygnatura);//Checking. Everything seems right there 

    } 
    else 
    { 
     printf("Error"); 
    } 
    fclose(fp1); 
} 

而主:

int main() { 
    struct FileHeader fheader; 
    struct MapHeader mheader; 

    char nazwapliku, *wczyt_nazwa =&nazwapliku; 
    printf("Podaj nazwe pliku bitmapy: "); 
    scanf("%s",wczyt_nazwa); 

    odczyt_pliku_bmp(fheader, mheader, wczyt_nazwa); 
    printf("%d\n",fheader.sygnatura);// And there is random trash 

    return 0; 
} 

另一个尝试使用指针:

void odczyt_pliku_bmp(struct FileHeader *fheader, struct MapHeader *mheader, char *nazwa) { 
    FILE *fp1; 
    fp1 =fopen(nazwa,"rb"); 

    if(fp1) 
    { 
     fread(fheader->sygnatura,2,1,fp1); 
     //... 


     printf("%d\n",fheader->sygnatura); 

    } 
    else 
    { 
     printf("Error"); 
    } 
    fclose(fp1); 
} 

再次主要为第二种方法:

int main() { 
    struct FileHeader fheader; 
    struct MapHeader mheader; 

    char nazwapliku, *wczyt_nazwa =&nazwapliku; 
    printf("Podaj nazwe pliku bitmapy: "); 
    scanf("%s",wczyt_nazwa); 

    odczyt_pliku_bmp(&fheader, &mheader, wczyt_nazwa); 
    printf("%d\n",fheader.sygnatura); 

    return 0; 
} 
+2

如果您不在代码中使用波兰语,它会更容易帮助您。 – Everettss

+0

'fread'将给定流中的数据读入数组。然而,在你的代码中,'fread'的第一个参数是一个结构。由于填充问题,这是有问题的;更好的方法是将文件头读入'unsigned char'数组中。 – mw215

+0

看看[this](http://*.com/questions/37779302/fread-into-struct-reads-data-incorrectly/37780151)可能会有所帮助。 – mw215

fread需要buffe的地址河因此,在第二次尝试中,通过地址fheader->sygnatura

fread(&fheader->sygnatura,2,1,fp1); 
+0

谢谢先生。一切都按预期运作。 – Aghero