C语言中读写交替时出现的问题分析
总结
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; }
到此这篇关于C语言中读写交替时出现的问题问题的文章就介绍到这了,更多相关c语言读写交替内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
C++ protobuf中对不同消息内容进行赋值的方式总结(set_、set_allocated_、mutable_、
这篇文章主要给大家介绍了关于C++ protobuf中对不同消息内容进行赋值的方式总结,主要使用的是set_、set_allocated_、mutable_、add_,文中通过实例代码介绍的非常详细,需要的朋友可以参考下2023-03-03在Centos7中使用vscode和gdb调试PG插件的方法
这篇文章主要介绍了在Centos7中使用vscode和gdb调试PG插件,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-09-09
最新评论