c\c++读取二进制文件,出现行数错误,求解!

辶井 2018-11-05 02:17:29
linux c 读取一个二进制文件,再保存到另一个文件,然后在某行某处出现断开,断开外置自动补零,结果保存下来的数据就多了很多行。请问这是什么问题呢?求大神解答,谢谢

左侧为保存后的数据,右侧为读取二进制的数据
...全文
99 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
林多 2018-11-05
  • 打赏
  • 举报
回复
仔细看二进制。。0a,表示换行。。fgets读到这里,相当于一行结束了。。后面的000000,都是补上去的。

然后下一行以 1c开始了。
赵4老师 2018-11-05
  • 打赏
  • 举报
回复
不要把
fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待

fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待
弄混了
云山大侠 2018-11-05
  • 打赏
  • 举报
回复
引用 2 楼 Forward__J 的回复:
[quote=引用 1 楼 sinat_37764097 的回复:]
代码问题,不用想了。


那为什么前18行正常,甚至18行到1c之前也是正常的,而1c就输出到了下一行,原1c位置自动补零?请问这个哪方面有问题呢?[/quote]
你得贴代码啊
辶井 2018-11-05
  • 打赏
  • 举报
回复
引用 5 楼 hjwang77 的回复:
二进制文件读取,用fread挺好的,为什么换成fgets,是不是换成fgets之后出现问题的? fgets是按行读取,由于判断换行符问题,不知道在读你这个文件时候会有啥问题。
谢谢大佬,是真的fgets问题,用fread就没问题了,非常感谢!
英雄@末路 2018-11-05
  • 打赏
  • 举报
回复
二进制文件读取,用fread挺好的,为什么换成fgets,是不是换成fgets之后出现问题的?
fgets是按行读取,由于判断换行符问题,不知道在读你这个文件时候会有啥问题。
辶井 2018-11-05
  • 打赏
  • 举报
回复
引用 3 楼 hjwang77 的回复:
你上面的需求不是在某处断开,自动补零的么? “然后在某行某处出现断开,断开外置自动补零” 这难道不是你代码的需求?如果不是的话,把read/write那几句贴出来看看吧,是不是缓冲分配有问题
我的需求是从bat文件里按每行读取16进制的数据,bat文件里用UE打开是每行16个16进制的数,文件读取的代码如下
英雄@末路 2018-11-05
  • 打赏
  • 举报
回复
你上面的需求不是在某处断开,自动补零的么?
“然后在某行某处出现断开,断开外置自动补零”

这难道不是你代码的需求?如果不是的话,把read/write那几句贴出来看看吧,是不是缓冲分配有问题
辶井 2018-11-05
  • 打赏
  • 举报
回复
引用 1 楼 sinat_37764097 的回复:
代码问题,不用想了。
那为什么前18行正常,甚至18行到1c之前也是正常的,而1c就输出到了下一行,原1c位置自动补零?请问这个哪方面有问题呢?
云山大侠 2018-11-05
  • 打赏
  • 举报
回复
代码问题,不用想了。
【资源说明】 数据结构课设基于SAT的二进制数独游戏求解C++源码+课设报告+代码注释.zip 数据结构课设基于SAT的二进制数独游戏求解C++源码+课设报告+代码注释.zip 数据结构课设基于SAT的二进制数独游戏求解C++源码+课设报告+代码注释.zip 1、该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能。 #### 介绍 要求基于DPLL算法实现一个完备SAT求解器,对输入的CNF范式算例文件,解析并建立其内部表示;精心设计问题中变元、文字、子句、公式等有效的物理存储结构以及一定的分支变元处理策略,使求解器具有优化的执行性能;对一定规模的算例能有效求解,输出与文件保存求解结果,统计求解时间。 #### 软件架构 软件架构说明 #### 使用说明 ## 1. 读取cnf文件 输入对应的处理文件(以.cnf结尾)绝对路径,或者将其放在与程序相同的文件夹下打开。 ## 2. 遍历输出每个句子 输出“已经”读入的.cnf文件 ## 3. DPLL求解算例并保存 进行SAT求解,并将结果以同名+.res结尾的形式保存 ## 4. 二进制数独游戏 在有求解器的条件下,可以创建一个二进制的数独游戏,并求其解。
SAT 问题即命题逻辑公式的可满足性问题(satisfiability problem),是计算机科学与人工智能基本问题,是一个典型的 NP 完全问题,可广泛应用于许多实际问题如硬件设计、安全协议验证等,具有重要理论意义与应用价值。本设计要求基于 DPLL 算法实现一个完备 SAT 求解器,对输入的 CNF 范式算例文件,解析并建立其内部表示;精心设计问题中变元、文字、子句、公式等有效的物理存储结构以及一定的分支变元处理策略,使求解器具有优化的执行性能;对一定规模的算例能有效求解,输出与文件保存求解结果,统计求解时间。 要求具有如下功能: 输入输出功能:包括程序执行参数的输入,SAT 算例 cnf 文件读取,执行结果的输出与文件保存等。(15%) 公式解析与验证:读取 cnf 算例文件,解析文件,基于一定的物理结构,建立公式的内部表示;并实现对解析正确性的验证功能,即遍历内部结构逐行输出与显示每个子句,与输入算例对比可人工判断解析功能的正确性。数据结构的设计可参考文献[1-3]。(15%) DPLL过程:基于DPLL算法框架,实现SAT算例的求解。(35%) 时间性能的测量:基于相应的时间处理函数(参考 time.h),记录 DPLL 过程执行时间(以毫秒为单位),并作为输出信息的一部分。(5%) 程序优化:对基本 DPLL 的实现进行存储结构、分支变元选取策略[1-3]等某一方面进行优化设计与实现,提供较明确的性能优化率结果。优化率的计算公式为:[(t-to)/t]*100%,其中 t 为未对 DPLL 优化时求解基准算例的执行时间,to 则为优化 DPLL 实现时求解同一算例的执行时间。(15%) SAT应用:将二进制数独游戏[5,6]问题转化为SAT问题[6],并集成到上面的求解器进行问题求解,游戏可玩,具有一定的/简单的交互性。应用问题归约为SAT问题的具体方法可参考文献[3]与[6-9]。(15%)

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧