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

C 这个简单代码块的错误是什么?,c,file,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){ pri

这就是代码

#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]);
}
#包括
#包括
#包括
#包括
结构数{
int a[5];
};
int main(){
结构数n;
n、 a[0]=56;
文件*fp=fopen(“saman.txt”、“w+”);
如果(fp==NULL){
printf(“错误”);
出口(0);
}
fwrite(&n,sizeof(n),1,fp);
fread(&n,sizeof(n),1,fp);
printf(“%i”,不适用[0]);
}
输出是0,但应该是56,不是吗?
你能帮我一下吗?

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

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



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

这是非常可读的。首先,你必须倒回文件的开头。我不这么认为,我得到了56。如果
fread
失败,那么
n.a[0]
不应该保留原来的值56吗?@interjay刚刚添加了一个注释。读和写指针不是不同吗?我的意思是,fwrite将使用写指针,fread应该使用读指针。@VivekS C stdio文件只有一个指针,用于读和写。