#include<stdio.h>
int main(int argc, char **argv){
FILE *fp = NULL;
fp = fopen("D://test.txt","wb");
if(fp == NULL){
printf("Error opening file\n");
}
typedef struct{
int a;
char b;
}A;
A x = {12, 'a'}, y = {13, 'b'},z;
fwrite(&x, sizeof(A), 1, fp);
fwrite(&y, sizeof(A), 1, fp);
fseek(fp, sizeof(A), SEEK_SET);
fread(&z, sizeof(A), 1, fp);
printf("%d %c\n", z.a, z.b);
return 0;
}我打算将2个结构写到一个文件中。然后,我需要将文件指针定位到文件中第二个结构的开头,然后从那里执行fread,以将第二个结构读取到z中。我不知道问题出在哪里。
发布于 2012-01-18 20:39:25
你用"wb“打开文件,写二进制。在写入之后,您将尝试读取相同的文件。将模式从"wb“改为"wb+":
//fp = fopen("D://test.txt","wb");
fp = fopen("D://test.txt","wb+");才能让它工作。
发布于 2012-01-18 21:57:22
总是检查每一个可能返回错误的调用。在您的示例中,您将看到fread不能正确读取数据。正如Carlito所说,您应该将fopen的模式参数更改为"wb+",以便能够读取文件。使用perror而不只是printf -这样你会得到一个信息性的错误消息,它会转到标准错误流,所以如果需要的话,它可以很容易地从标准输出流中分离出来。此外,你应该在错误发生时中断你的程序流,而不仅仅是打印错误消息。
您应该始终自动执行所有这些步骤:检查返回值;检查到底发生了什么;更改程序流以处理错误。这就是咒语。:)
https://stackoverflow.com/questions/8910087
复制相似问题