fscanf移动了rp的当前位置
所以在fprintf(rp,"%d",j)
之前要使用
fseek(rp, 0, SEEK_SET)
把位置移到前面
你需要解决两个问题。1、待更改的文件应该是以“块”状形式写入的,比如fwrite((void *)student stu,sizeof(student),1L,fp),只有这样才能准确定位待更改“块”的位置。而以fprintf()写入的文件,可能由于数据的不同,每个结构数据占用的空间就不同,即使你能准确定位,但写入新数据后,若长度短了,剩余的空间可能造成混乱,若长度长了,可能造成”覆盖“。
2、打开文件同时用于”读/写“时,打开的格式是"r+"或”w+“。
另外,还需要搞清楚文件读写指针的使用特点,前两个问题解决后再讨论。
你原来的文件是二进制文件的话,才可以用"b"
if((da
=
fopen("data.txt",
"ab+"))
==
NULL)
二进制文件用
fseek
找到读写位置,用fwrite来写,不用fprintf。
用二进制文件你可以一个结构一个结构地读写。
如果你原来的文件是文本文件的话,不可以用
"b"
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)