展开和函数中的结构指针
问题描述:
我正在读取位图程序。事情是我写了所有的东西,需要将代码分发给函数。我正在使用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;
}
答
fread
需要buffe的地址河因此,在第二次尝试中,通过地址fheader->sygnatura
:
fread(&fheader->sygnatura,2,1,fp1);
+0
谢谢先生。一切都按预期运作。 – Aghero
如果您不在代码中使用波兰语,它会更容易帮助您。 – Everettss
'fread'将给定流中的数据读入数组。然而,在你的代码中,'fread'的第一个参数是一个结构。由于填充问题,这是有问题的;更好的方法是将文件头读入'unsigned char'数组中。 – mw215
看看[this](http://*.com/questions/37779302/fread-into-struct-reads-data-incorrectly/37780151)可能会有所帮助。 – mw215