我正在研究读取位图的程序。问题是我在 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);
关于c - 函数中的读取和指向结构的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37820889/