繁体   English   中英

了解fseek的用法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM