C语言中读写交替时出现的问题分析
MAR-Sky 人气:0总结
1. 读写命令交替,一定要使用fseek重新定位,否则出现输入显示混乱
2. a追加写入,不能读;a+:只能追加写入,可读取全部
3. a相关模式不能修改原始数据文本,而r+可以修改原始文本
4. 写入的文本,不论是字符还是字符串,最后是有自动添加的\0,个人根据现象理解的
“+”模式添加的不同
#include <stdio.h> #include <stdlib.h> int main(void){ FILE *fp; char b; //每次测试保证txt文件中只"有123456"这6个字符; fp=fopen("file.txt","a+"); //只仅仅修改这里的模式为a+和a,和保证txt开始文本只有123456 rewind(fp); //指针在文件开始 b = fgetc(fp); printf("第一次读:%c\n",b); fseek(fp,2,0); printf("第二次读:%c\n",fgetc(fp)); fseek(fp,2,0); fputs("sag",fp); printf("第三次读:%c\n",fgetc(fp)); fclose(fp); system("type file.txt "); //只是在cmd窗口显示文本内容,懒得每次打开txt查看 printf("\n"); system("pause"); return 0; }
显示结果a+和a对比分析:
a模式没有读取数据的功能,但能写入,a+模式有读写的功能,但写指针和读指针不是同一位置,而且写文本时会同时移动两个指针,但会一直在文档结尾追加
a+可读写的文件出现的问题
一次写入命令后,若不定位指针,那么紧接着的读取命令也会写入;a+模式下,文档最后写入了6。因此,需要注意每次读取和写入文本命令转换时重新使用feek(fp,n,0)
定位
每个+(r+为例)模式下,读写交替,不重新fseek出现的问题
读和写命令转换时也会出现问题,
#include <stdio.h> #include <stdlib.h> int main(void){ FILE *fp; char a[4],b; fp=fopen("file.txt","r+"); rewind(fp); b = fgetc(fp); printf("第一次读:%c\n",b); fseek(fp,2,0); printf("第二次读:%c\n",fgetc(fp)); fseek(fp,1,0); fputs("sa",fp); //fseek(fp,2,0); printf("第三次读:%c\n",fgetc(fp)); fclose(fp); system("type file.txt "); printf("\n"); system("pause"); return 0; }
加载全部内容