从文件读取到struct的指针

时间:2012-12-19 10:58:51

标签: c file pointers

我需要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] - &gt;缓冲区很糟糕,因为它不起作用。

抱歉我的英语不好:(

2 个答案:

答案 0 :(得分:0)

问题是rcftp_msg *windows [10];是一个你没有初始化的指针数组,即分配的内存。

要为指针分配内存,您应该使用malloc

像这样:

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

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

当您完成后,还可以使用free()再次释放内存。

答案 1 :(得分:0)

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 >= sizeof(uint8_t) * RCFTP_BUFLEN)