首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >了解fseek的用法

了解fseek的用法
EN

Stack Overflow用户
提问于 2012-01-18 20:27:31
回答 2查看 2.1K关注 0票数 2
代码语言:javascript
复制
#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中。我不知道问题出在哪里。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-18 20:39:25

你用"wb“打开文件,写二进制。在写入之后,您将尝试读取相同的文件。将模式从"wb“改为"wb+":

代码语言:javascript
复制
//fp = fopen("D://test.txt","wb");
fp = fopen("D://test.txt","wb+");

才能让它工作。

票数 3
EN

Stack Overflow用户

发布于 2012-01-18 21:57:22

总是检查每一个可能返回错误的调用。在您的示例中,您将看到fread不能正确读取数据。正如Carlito所说,您应该将fopen的模式参数更改为"wb+",以便能够读取文件。使用perror而不只是printf -这样你会得到一个信息性的错误消息,它会转到标准错误流,所以如果需要的话,它可以很容易地从标准输出流中分离出来。此外,你应该在错误发生时中断你的程序流,而不仅仅是打印错误消息。

您应该始终自动执行所有这些步骤:检查返回值;检查到底发生了什么;更改程序流以处理错误。这就是咒语。:)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8910087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档