[英]understanding usage of fseek
#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个结构写入文件。 然后,我需要将文件指针定位到文件中第二个结构的开头,然后从那里执行读取操作以将第二个结构读入z。 值未正确读入z。 我没有找到问题所在。
您用“ wb”打开文件,编写二进制文件。 写入后,您尝试读取相同的文件。 将模式从“ wb”更改为“ wb +”:
//fp = fopen("D://test.txt","wb");
fp = fopen("D://test.txt","wb+");
使它工作。
始终检查每个可能返回错误的呼叫。 在您的情况下,您将看到fread
无法正确读取数据。 正如Carlito所说,您应该将fopen
的mode参数更改为"wb+"
,以便能够从文件读取。 并使用perror
而不只是printf
-所以你会得到一个信息的错误消息,并且它会去标准错误流,所以它可能是容易的,如果需要从标准输出流中分离出来。 另外,发生错误时,您应该中断程序流程,而不仅仅是打印错误消息。
您应该始终自动执行所有这些步骤:检查返回值; 看看到底发生了什么事; 更改程序流程以处理错误。 这是咒语。 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.