[英]Cannot copy contents of buffer into string: reading from .bin file in C
我有一个函数,可以从文件中读取一定数量的字节并将这些字节放入字符串中。 使用fread可以在缓冲区b中打印每个元素的内容,但是如果我尝试打印整个字符串(b),则不会打印任何内容。 这是在for循环的代码中完成的; 我打印b [i]的内容。 然后在for循环之后,我尝试打印b,然后将b的内容放入我创建的结构中,供其他地方使用。
为什么会这样?
void load_frame(struct Entry P[], int framenum){
char b[256];
FILE*fp;
char *temp = malloc(256);
fp = fopen("BACKING_STORE.bin", "rb");
printf("We opened the file\n");
fseek(fp, 256*framenum,SEEK_SET);
fread(b, sizeof(b), 1, fp);
fclose(fp);
int i;
printf("Looking at the contents of buffer: \n");
for(i = 0; i < 10; i ++){
printf("%u\n", b[i]);
}
//Print contents of whole buffer
printf("%s",b);
//b[10] = "\0";
//Put b into char* content part of structure Entry
P[framenum].content = b;
printf("Content is: %s\n", P[framenum].content);
P[framenum].frame=framenum;
}
您将间接返回指向本地数组b
的指针。 当函数返回并且存储在P[framenum].content
值不再有效时,它将超出范围。 它可以被其他功能覆盖,因为它不再是您要使用的内存。
另外,缓冲区是否以空字节开头? 它是否包含空字节? 这些将终止字符串。
除了泄漏内存外,目前还不清楚您正在使用temp
做什么。 但是,您可以很好地利用它而不是使用b
(但是您必须测试对malloc()
调用是否成功)。 完成后,调用代码将必须释放P[framenum].content
的内存。
您需要捕获并使用fread()
返回的值。 您需要验证文件是否成功打开。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.