字符的读取、写入及替换的操作及坑

字符的读取及写入

fopen按照具体操作,按照对应的格式打开文件,具体格式有"r","w","r+","a+"等,有的如果文件夹不存在,可自动创建文件夹,而有的格式则要求文件必须已经存在,如"r+"等。具体含义可以百度。

fopen();

fread();

fgets(fp);读取一行。

fgetc(fp);读取一个字符。

fwrite();

fprintf();按照一系列格式写入字符串到文件中。跟sprintf一样好用。

读取和写入遇到的坑:

某次业务操作,要替换文本中的字符串,以“r+”的格式打开的文本文件。最开始的思路是fgetc()挨个读取字符,读到需要修改部分调用fwrite()写入,且先不说覆盖的问题。使用时发现,调用fgetc()或者fgets()之后,fwrite始终无法写入。开始百度,答案时这样的:

当指定"r+“、"w+”或"a+“访问类型时,将启用读写功能(该文件据说为”update“打开)。但是,当您从读到写时,输入操作必须遇到EOF标记如果没有EOF,则必须使用对文件定位函数的中间调用。文件定位功能有fseek,fsetpos、rewind和rewind等。当您从写入切换到读取时,必须使用对fflush或对文件定位函数的中间调用。

它不能工作,因为C标准( fopen函数第7段中的C11草案n1570 7.21.5.3;以及所有以前的版本)都表示它不必工作。虽然以"r+"格式打开文件,可以对关联的流执行输入和输出。但是,在没有对fflush函数或文件定位函数( fseekfsetposrewind )进行中间调用的情况下,输出不应直接跟随输入,而在没有对文件定位函数进行中间调用的情况下输入不应直接跟随输出,除非输入操作遇到EOF结尾。

所以答案:即使是以"r+"及其他的可读可写的模式打开文件,但是不能一会输出一会输入,就是不能一会读取一会写入,中间需要一些操作进行间隔。读到一半想写两句,先调用fseek等,例如可就调用fseek(fp, 0, SEEK_CUR),不做操作就刷新一下fp,后面就可以写入了。如果写查出不多了想读呢,加入fflush(fp),就可以接着读了。

C语言字符串替换

据说用python写字符串替换比较简单,但是python用的不熟,电脑也没配python环境。所以还是c语言吧。

百度了一下,大家的思路大致都为,两个文件。一个是旧的要更新字符串的文件,用来读取内容,一个新的专门用来写,用来存储字符串替换了之后的文件。

只读模式打开读取待替换字符串的文件,读取到待替换的内容之前,将读取到的内容拷贝到写入文件中,要替换的地方,直接写入新字符串。在读取文件中跳过待替换字符串位置,然后接着往后读,接着拷贝。总之,读取原本文件内容,没到要替换的串之前就通通拷贝到写入文件中,碰到要替换的串了,在写入文件中写入新串,在读取文件中跳过要替换的串接着统统拷贝,直到遇见下一次要被替换的串。

代码可参考链接:https://blog.csdn.net/weixin_41695564/article/details/80613157

为什么要开两个文件,因为就算用来fseek,fflush实现了边读取边写入,但是如果替换的字符串比原字符串要长的话,则会覆盖掉原串后面的内容,这个不好处理。所以重新写入比较方便。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值