Fread 和指向函数中结构的指针

Fread and pointer to structures in functions

我正在做程序读取位图。问题是我在 main 中写了所有东西,需要将代码分散到函数中。我正在使用标准结构寻址使用 fread 读取信息,但在离开函数后我无法以某种方式访问​​信息。所以我尝试通过指针寻址结构,但 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;
}

fread 需要缓冲区的地址。因此,在您的第二次尝试中,传递 fheader->sygnatura:

的地址
fread(&fheader->sygnatura,2,1,fp1);