1

我需要 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不好,因为它不起作用。

对不起,我的英语不好 :(

4

2 回答 2

0

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

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

像这样:

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

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

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

于 2012-12-19T11:01:50.837 回答
0

astruct rcftp_msg *是指向 a 的指针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).

于 2012-12-19T11:04:53.053 回答