C文件中,为什么我写了个文件打开却只是?呢?
答案:2 悬赏:50
解决时间 2021-11-13 23:08
- 提问者网友:乱人心
- 2021-11-13 00:46
#include
struct student
{
int num;
char name[20];
int age;
char addr[20];
}st1[3],st2[3],*p1,*p2;
void main()
{
FILE *fp;
int i;
p1=st1;
p2=st2;
if((fp=fopen("C:\\文本.txt","w+"))==NULL)
{
printf("Can not open this file\n");
exit(0);
}
printf("input data:\n");
for(i=0;i<3;i++)
{
scanf("%d%s%d%s",&p1->num,p1->name,&p1->age,&p1->addr);
p1++;
}
p1=st1;
fwrite(p1,sizeof(struct student),3,fp);
rewind(fp);
fread(p2,sizeof(struct student),3,fp);
printf("NUM\tNAME\tAGE\tADDR\n");
for(i=0;i<3;i++)
{
printf("%d\t%s\t%d\t%s\n",p2->num,p2->name,p2->age,p2->addr);
p2++;
}
fclose(fp);
}
最佳答案
- 二级知识专家网友:情战凌云蔡小葵
- 2021-11-13 01:25
没用过w+ 模式。 关于二进制写入和读取,我之前都是用 wb 方式写, 然后再用 rb方式打开读。
怀疑是二进制和文本模式的问题,你可以加一句代码试一下:
_set_fmode(_O_BINARY);
设置文件操作为二进制模式,或者在fopen的模式上加b。
全部回答
- 1楼网友:摧毁过往
- 2021-11-13 02:15
预编译的时候会把包含的头文件展开,即把头文件里面的内容展开在当前文件中,如果包含所有头文件,第一会很占空间,因为有些头文件里面的变量(比如有很大的数组或者什么的)在当前这个文件并没有用到;其次很耗时间,因为要一个个去展开;第三,撇开时间和空间消耗不说,可能会存在不同头文件中声明或者定义了同名变量,这样在编译的时候就会报错。但是你却很难找到错误,因为头文件里面的东西你看不见,其次还可能引起一个重复包含的问题,比如头文件a.h包含了b.h,你在当前.c文件中如果#include"a.h" 后又#include"b.h" 的时候就会报错了,因为你重复包含了,当然重复包含可以通过#ifdef#endif机制解决。但是你不能保证每个头文件中都做了这样的操作。
我要举报
大家都在看
推荐资讯