文本文件的一些问题的粗浅看法

本文探讨了在C语言中使用链表处理文件字符串局部修改的问题。作者遇到fseek和fscanf在处理空格时的困扰,尝试覆盖写入导致文件内容意外改变。通过深入理解文本文件编码的连续性,作者最终选择将数据存储到链表,然后以"w"模式重新写入文件,成功实现功能。该方法揭示了文件操作的细节及其挑战。
摘要由CSDN通过智能技术生成

不在意格式。
源于我写C语言链表大作业。诊疗记录,无所谓任何名字。最终都是对写在文件中的部分字符串进行局部修改的操作。
我一开始有两种思路。我以为有两种方法,第一种是移动文件指针,fseek,然后进行覆盖操作,权限为fopen(“bulabula.txt”,“r+”),这样调试下来。
一开始使用的fscanf(%s)发现读不了空格。造成了字符串的strlen误解,然后fseek报错是-1。后来即使发现了这个问题,我又开始想这样一个问题。如果覆盖前后的字符串长度是前者大于后者,那么输出之后,无疑会使得后面的部分字符串的尾巴暴露。如此没有做到能够局部修改。这不是我想要的结果。
于是,我想覆盖写上200个空格,确保把之前的字符串给清空,然后进行再次fseek回去覆盖写。结果,发现,后面的部分文字居然缺失了。
比如原本的字符是:
202009282245 以后 45 78 89
结果现在成了:
282245 以后 45 78 89
就是说前面的一部分字符被覆盖了,可以这样说的,因为我对于字符串的操作只有覆盖这一操作。那么如此我想到了以下几点:
文本文件的编码方式:
必然是连续的串,如何来理解这个连续呢?即看到的是:
456亿的大V
456789带个人
实际上的编码如下:
456亿的大V(换行编码)456789带个人
那么我对于前者的覆盖,就会造成实际上把后面的部分字符覆盖成了空,而因为换行符号还是存在,或者是我自己又输出了换行,那么无疑就会造成这样的结果。

目前对于编码的理解还是比较粗浅。所以,不敢说是正确,后来没有办法,只好绕道而行。于是,我直接将数据放到链表里面,重新fopen(“w”)了整个文件,这次倒是真的没有什么大问题了。经过了过量的严格限制之后,终于实现了我的功能。不过算法依然缺乏。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值