所以我有一本结构书,
struct book
{
unsigned short content_size;
unsigned short price;
unsigned char *content;
};
一个包含5本书的输入文件,其中包含这样的内容,但实际文件中包含二进制格式:
content_size:64价格:33
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
content_size:16价格:21
bbbbbbbbbbbbbbbb
content_size:16价格:22
cccccccccccccccc
content_size:32价格:10
dddddddddddddddddddddddddddddddd
content_size:32价格:8
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
但是,我得到了以下输出:
读一本书,大小是:64读一本书,大小是:24929
读一本书,大小是:24929
读一本书,大小是:24929
读一本书,大小是:24929
读一本书,大小是:16 读一本书,大小是:25186 读一本书,大小是:16 读一本书,大小是:25443 读一本书,大小是:32 读一本书,大小是:25700 读一本书,大小是:25700 读一本书,大小是:32 读一本书,大小是:25957 读一本书,大小是:25957
那些大数字是什么?我为什么要阅读它们?谢谢!
答案 0 :(得分:2)
size_t nread;
struct book book1;
while ((nread = fread(&book1.content_size, sizeof book1.content_size, 1, infp)) > 0) {
fread(&book1.price, sizeof book1.price, 1, infp);
book1.content = malloc(book1.content_size+1);
fread(book1.content, 1, book1.content_size, infp);
book1.content[book1.content_size] = '\0';
printf("read a book, size is %d, price is %d, content is %s\n", book1.content_size, book1.price, book1.content);
free(book1.content);
}
答案 1 :(得分:0)
我认为struct packet
是struct book
我错了吗?我不是你的代码有问题。该结构包含一个char *
指针,您无法从文件中读取指针而没有问题。我怀疑你想阅读'b'的'a'序列,并从那个读数中得到char *
。但你不能这样做。你应该读这样的“字符串”:
char t[MAX];
l=fread(t,sizeof(char),length,yourfilehandler)
yourBook->content = malloc(l+1);
memcpy(yourBook->content,t,l);
yourBook->content[l] = '\0';
问题是要确定length
的值,因为你没有详细说明文件是如何组织的我们无法回答(你提到文件是二进制格式,但是哪一个?)