【发布时间】:2018-09-23 15:16:26
【问题描述】:
所以我正在做一个项目,但我没有把所有的部分放在一起来完成这项工作。我们需要读入一个二进制文件的头部并将它们存储在指定的指针处。
我正在从事的功能:
int read_header (FILE *file, elf_hdr_t *hdr);
我了解如何将信息传递给函数,但我不明白如何读入指定的指针。我整天都在努力寻找这方面的信息,但无法真正弄清楚我的出发点......感谢您提供的任何指导。
到目前为止我的代码:
int read_header (FILE *file, elf_hdr_t *hdr)
{
int read;
read = fread(hdr, 1, sizeof(hdr), file);
fclose(file);
}
我想知道我是否正在做我在这里尝试的事情,基本上是想一次读取一个字节到指定的指针。
【问题讨论】:
-
显示您作为
hdr传递的原始声明。您是否在调用者中将其声明为elf_hdr_t hdr;,然后将&hdr作为参数传递?如果您将其声明为elf_hdr_t *hdr并传递hdr,则read_header收到指针的副本 而不是指针本身,并且read_header中对hdr的任何更改都将丢失当函数返回时。 -
我正在创建 elf_hdr_t hdr;然后 elf_hdr_t *hdr_p = &hdr;并将 hdr_p 传递给 read_header
-
之所以有效,是因为
elf_hdr_t hdr;声明hdr具有自动存储类型 提供足够的存储空间。如果你声明了elf_hdr_t *hdr;,hdr将只是一个未初始化的指针。 -
sizeof(hdr)是指针的大小。我想你想要sizeof(*hdr)或sizeof(elf_hdr_t)。我认为你应该展示你的真实代码。您之前的示例无法编译。