【问题标题】:Read from file into pointer to struct从文件读入指向结构的指针
【发布时间】:2012-12-19 10:58:50
【问题描述】:

我需要 C 中的指针方面的帮助。 我必须从文件中读取,并用指向 struct rcftp_msg 的指针填充数组。 从现在开始我做了接下来的事情:

struct rcftp_msg {

    uint8_t version;        
    uint8_t flags;              
    uint16_t len;       
    uint8_t buffer[512];    
};

struct rcftp_msg *windows [10];

pfile = fopen(file,"r"); // Open the file

I have to read from the file into the buffer, but I don't know how to do it.
I tried the next:

for (i = 0; i <10; i++){

leng=fread (**windows[i]->buffer**,sizeof(uint8_t),512,pfile);

} 

我认为 windows[i]->buffer 不好,因为它不起作用。

对不起我的英语不好:(

【问题讨论】:

  • 你分配windows了吗?
  • 您在下面有一些正确的答案,但是当您实施它们时,还可以使用 #define BUF_SIZE 10 之类的东西,而不是到处重复文字。并不是说它在功能上很重要,但它是未来可维护性的更好做法。
  • buffer[512] 元素是实际大小,还是 最大 大小,len 字段决定实际大小?

标签: c file pointers


【解决方案1】:

问题在于rcftp_msg *windows [10]; 是一个指针数组,您尚未初始化,即为其分配内存。

要将内存分配给一个指针,您应该使用malloc

像这样:

windows[i] = malloc(sizeof(rcftp_msg));

对数组中的每个指针执行此操作。

完成后也可以使用free() 再次释放内存。

【讨论】:

    【解决方案2】:

    struct rcftp_msg * 是一个 指针 指向 struct rcftp_msg,而不是真实的东西。因此,您还需要为真实事物分配内存。最简单的方法是使用指针:

    struct rcftp_msg windows[10];
    …
    for (i = 0; i <10; i++){
        len = fread (&(windows[i].buffer), sizeof(uint8_t), RCFTP_BUFLEN, pfile);
    }
    

    或者在使用前分配内存。

    struct rcftp_msg *windows[10];
    …
    for (i = 0; i <10; i++){
        windows[i] = malloc(sizeof(uint8_t) * RCFTP_BUFLEN);
        leng = fread(windows[i]->buffer, sizeof(uint8_t), RCFTP_BUFLEN, pfile);
    }
    

    还要确保512 &gt;= sizeof(uint8_t) * RCFTP_BUFLEN)

    【讨论】:

      猜你喜欢
      • 2017-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-21
      • 2012-03-28
      相关资源
      最近更新 更多