这个简单代码块的错误是什么?

时间:2013-09-17 10:54:43

标签: c file

这是代码,

#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>

struct num{
    int a[5];
};

int main(){
    struct num n;
    n.a[0]=56;

    FILE * fp=fopen("saman.txt","w+");

    if(fp==NULL){
        printf("error");
        exit(0);
    }

    fwrite(&n,sizeof(n),1,fp);  
    fread(&n,sizeof(n),1,fp);   
    printf("%i",n.a[0]);
}

输出为0,但它应该是56,不是吗? 你可以帮帮我吗?

1 个答案:

答案 0 :(得分:4)

编写结构时,文件的位置指针会增加。当你尝试阅读时,它将尝试从当前位置读取,但它现在位于文件的末尾,因此你不会读取任何内容。

您应该检查fread的返回值,看看它是否真的成功了。


在检查C规范(C11)第7.21.8.1节(标题为“fread函数”)之后,实际上并没有说出出现错误时数据应该发生什么,所以我会说的是您尝试读取的数据未定义,可以是任何内容。