【问题标题】:How to read in a binary file and store the data at a pointer in C如何读入二进制文件并将数据存储在C中的指针处
【发布时间】: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)。我认为你应该展示你的真实代码。您之前的示例无法编译。

标签: c file-io elf


【解决方案1】:

由于hdr 是一个指针,sizeof(hdr) 将只是一个指针的大小。您希望 sizeof(*hdr)sizeof(elf_hdr_t) 获取指针指向的 elf 标头结构的大小...

【讨论】:

  • 啊,这就是我的问题所在,非常感谢
【解决方案2】:

请重新阅读 fread() 的 MAN 页面

这两个参数:1, sizeof(hdr), 表示读取 sizeof(hdr) 字节,而不是读取 1 字节

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-30
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 2017-05-20
    相关资源
    最近更新 更多