c 写文件 fwrite 是写到什么位置
答案:2 悬赏:40 手机版
解决时间 2021-03-18 07:29
- 提问者网友:了了无期
- 2021-03-17 21:23
c 写文件 fwrite 是写到什么位置
最佳答案
- 五星知识达人网友:归鹤鸣
- 2021-03-17 23:02
这个得看你文件打开的方式,或者你fseek指定的位置
全部回答
- 1楼网友:爱难随人意
- 2021-03-17 23:32
如下定义:
struct apparatus_info{ //定义仪器设备信息结构体
char number[10]; //设备编号
char name[20]; //设备名称
double price; //设备单价
char indate[20]; //购进的时间
char producter[20]; //生产厂家
int count; //购进的数量
char usability[initial_size]; //设备的可用性
};
问题有好几处,也有几种方法解决
1,
分配给records[numapps]的内存空间虽然是给它使用
但是它没有初始化,里面是有一堆乱七八糟的数据
之后你保存到records[numapps]里的数据
如果没有用完numapps空间
尾巴还是有一堆乱七八糟的数据
所以不干净
如果records[numapps]是字符串
搬进去住前先把房间打扫一下,用
memset(records,0,numapps);
就是让它的存储空间全部写0
但是你的records[numapps]是结构体数组
所以需要另外保证每组数据的每个成员都有写值
2,
你用的是gets(str);
输入的是字符串,回车结束
str是10,而records得成员有10,20,这就有隐患
3,
atof和atoi函数使用的时候要小心
对于atoi和atof,
有新的函数可以替代
atoi可以用strtol替代,
而atof可以用strtod等替代
strtol比atoi安全,
records[numapps].price=(float)atof(str);
改成
records[numapps].price=(double)atof(str);
4,
输入records[numapps]成员数据的时候不如用
scanf("%d%f%s",&......);
格式化输入安全
5,
fp=fopen("app_info.txt","w");
是以文本方式写入文件的
fwrite(&records[i],sizeof(appinfo),1,fp);
验证app_info.txt是文本还是二进制
fwrite的第一个参数是字符串,是文本
fwrite的第一个参数是int或float,是二进制
你的参数是结构体,数据类型复杂,app_info.txt是二进制
具体情况要具体分析
还有fwrite输出结构体数组数据,一句话多痛快
但是你要阅读,或者用程序读出来的时候你会感觉登山一样难
所以用fprintf格式化输出安全
for(i=0;i
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯