#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。这些值未正确读入z。我无法解决问题所在。
答案 0 :(得分:3)
用“wb”打开文件,写二进制文件。写完后,您正在尝试读取相同的文件。将模式从“wb”更改为“wb +”:
//fp = fopen("D://test.txt","wb");
fp = fopen("D://test.txt","wb+");
让它发挥作用。
答案 1 :(得分:2)
始终检查每个可能返回错误的电话。在您的情况下,您会看到fread
无法正确读取数据。正如Carlito所说,您应该将fopen
的模式参数更改为"wb+"
,以便能够从文件中读取。并且使用perror
而不仅仅是printf
- 因此您将获得信息性错误消息,并且它将转到标准错误流,因此如果需要,可以很容易地将其与标准输出流分开。此外,您应该在发生错误时中断程序流程,而不仅仅是打印错误消息。
您应该自动执行所有这些步骤:检查返回值;看看,究竟发生了什么;更改程序流以处理错误。这是口头禅。 :)