2
#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。我没有找到问题所在。

4

2 回答 2

3

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

//fp = fopen("D://test.txt","wb");
fp = fopen("D://test.txt","wb+");

让它工作。

于 2012-01-18T12:39:24.580 回答
2

始终检查每个可能返回错误的调用。在您的情况下,您会看到fread无法正确读取数据。正如 Carlito 所说,您应该将 mode 参数更改为fopento"wb+"以便能够从文件中读取。并使用perror而不是printf- 这样您将获得信息丰富的错误消息,它将进入标准错误流,因此如果需要,它可以很容易地与标准输出流分开。此外,当发生错误时,您应该中断程序流程,而不仅仅是打印错误消息。

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

于 2012-01-18T13:57:21.657 回答