我需要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;缓冲区很糟糕,因为它不起作用。
抱歉我的英语不好:(
答案 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)
。