最近在写aes,把加密的结果存在本地文件中然后再读出来解密,因为是加密过后的十六进制数转的字符,和正常的键盘输入不太一样,然后我从文件读取的时候就出现问题了,读到一半就发现它自动停止了。

贴一下我出错时候的代码

int readStrFromFile(char* fileName, char* str) {FILE* fp = fopen(fileName, "rb");if (fp == NULL) {printf("打开文件出错,请确认文件存在当前目录下!\n");exit(0);}int i;for (i = 0; i < MAXLEN && (str[i] = getc(fp)) != EOF; i++);if (i >= MAXLEN) {printf("解密文件过大!\n");exit(0);}str[i] = '\0';fclose(fp);return i;
}int clen;
char str[MAXLEN];
char fileName[64];
if (scanf("%s", fileName) == 1){clen = readStrFromFile(fileName, str);
}

其实我之前这个也用了好久了,我之前用的时候一直没有问题,直到我今天测一组数据的时候才触发了这个异常。

那个读取的文件是这样的:

我实际上读到锲那个字后边就不读了,虽然这句前边看见还有个空格,但是扔到转十六进制的软件里,发现这俩空格还不一样。

搜了一下,有一种可能是就正好读到某个地方是EOF了,它就终止了。

解决办法是改为使用feof()。

feof()的原理:
feof()函数,并不是通过读取到文件的EOF来评判,这个文件是否为空。
对feof()来说,它的工作原理是,站在光标所在位置,向后看看还有没有字符。如果有,返回0;如果没有,返回非0。它并不会读取相关信息,只是查看光标后是否还有内容。

看上去它比getc()更适合这个场景。

所以代码现在成了这样:

int readStrFromFile(char* fileName, char* str) {FILE* fp = fopen(fileName, "rb");if (fp == NULL) {printf("打开文件出错,请确认文件存在当前目录下!\n");exit(0);}int i;for (i = 0; i < MAXLEN && !feof(fp); i++){str[i] = getc(fp);}i--;//    printf("文件读取时:i=%d\n",i);if (i >= MAXLEN) {printf("解密文件过大!\n");exit(0);}str[i] = '\0';fclose(fp);return i;
}

因为这样实际上它还读了那个EOF的文件结束,所以我个人更倾向于最后i–; 然后在最后头补一个’\0’;
这块儿我自己理解的也不是特别清楚,可以多输出一下比对验证。

getc()读取文件读到一半就终止的解决办法相关推荐

  1. python跳过错误_Pandas之read_csv()读取文件跳过报错行的解决

    读取文件时遇到和列数不对应的行,此时会报错.若报错行可以忽略,则添加以下参数: 样式: pandas.read_csv(***,error_bad_lines=False) pandas.read_c ...

  2. mysql服务启动报错:“服务读取描述失败,错误代码:2”的解决办法?

    mysql服务启动报错:"服务读取描述失败,错误代码:2"的解决办法? 这个问题是mysql的服务被损坏了,需要重建服务,不需要重新安装mysql,方法步骤如下 第1步:删除已有的 ...

  3. mysql导入sql文件过大或连接超时的解决办法

    原文:mysql导入sql文件过大或连接超时的解决办法 前段时间出差在现场开发的时候,导入数据库老是出问题.最后发现了一个神奇sql语句交给实施,只要导入出错就把如下语句执行就可以了.至今屡试不爽. ...

  4. 计算机回收站怎么设计无法删除,电脑回收站中ai文件删不掉如何解决? ai文件在回收站删不掉的解决办法...

    电脑回收站中ai文件删不掉该怎么办?在清理电脑回收站的时候,发现很多.ai文件都删不掉,粉碎也不行,这是怎么回事?下面我们来看看ai文件在回收站删不掉的解决办法,具体内容如下 一些做平面设计的用户可能 ...

  5. 双击打开Excel2016文件后无法直接显示文件内容的解决办法

    双击打开Excel2016文件后无法直接显示文件内容的解决办法 1.打开Excel2016文件,选择 文件–>选项–>高级–>常规,不勾选"忽略使用动态数据交换(DDE)的 ...

  6. 右键单击文件、文件夹,一直转圈圈的解决办法小总结

    右键单击文件.文件夹,一直转圈圈的解决办法小总结 一.删除注册表(这个对我的情况没用) https://blog.csdn.net/weixin_40816738/article/details/90 ...

  7. word文件和扩展名不匹配的解决办法,亲测有效

    word文件和扩展名不匹配的解决办法,亲测有效 博主所用系统为win10 1. 修改后缀 找到.asd的原始位置 解决办法 另外一种方法(测试无效) 博主所用系统为win10 昨天晚上写 了一晚上的论 ...

  8. 关于centOS7在U盘安装时遇到的dracut-initqueue[]:Warning:dracut-inituenue timeout....查找不到文件无法安装系统的问题的解决办法。

    关于centOS7在U盘安装时遇到的dracut-initqueue[]:Warning:dracut-inituenue timeout-查找不到文件无法安装系统的问题的解决办法. 尝试自己安装ce ...

  9. maxlength不起作用android,Android EditText设置Filter以后(xml布局文件中maxLength不起作用的解决办法)...

    Android EditText设置Filter以后,xml布局文件中maxLength不起作用的解决办法 问题发现 最近项目里有个需求,文本框禁用emoji表情的输入,因为用到的地方较多,第一个想到 ...

  10. Qt删除文件夹时父文件夹一并删除的原因与解决办法

    Qt删除文件夹及子文件夹全部文件时父文件夹一并删除的原因与解决办法 初学Qt文件操作,总会先去查阅各种资料,参考各种代码然后一点点地去调试. 我在编写"删除文件夹及子目录与所有文件" ...

最新文章

  1. Eclipse搭建Android5.0应用开发环境 “ndk-build”:launchingfailed问题解决
  2. ML:MLOps系列讲解之《CRISP-ML (Q)ML生命周期过程—了解机器学习开发的标准过程模型—业务和数据理解→数据工程(数据准备)→ML模型工程→评估ML模型→模型部署→模型监控和维护》解读
  3. 插入排序之表插入排序
  4. shell中的大括号和小括号
  5. wx:for双层循环
  6. U-Boot提供的指令
  7. Android 面试(四):Android Service 你真的能应答自如了吗?
  8. 易普优APS 5.0高级计划排程系统助力工业4.0智能工厂建设
  9. 软件工程毕业设计题目合集【含源码+论文】
  10. excel熵值法计算权重_SPSSAU一众新功能上线:高级公式、综合得分一键计算!
  11. 3分钟微信支付商家注册0.2费率开户方法,0.38~0.6的必看
  12. dns服务器无法自动,dns服务存在问题如何解决【解决方法】
  13. 服务器系统开机黑屏只有个鼠标,Win7系统开机却显示黑屏并只有鼠标光标该怎么办...
  14. 学习项目管理理论后的体会
  15. 计算机管理主分区改成逻辑分区,win10系统电脑的四个分区都是主分区,主分区如何改为逻辑分区?...
  16. java正则开头结尾_以m开头以d结尾的正则表达式-正则表达式以什么开头-正则表达式不以0开头...
  17. MySQL连接查询练习
  18. 下载的视频花屏怎么办?其实很简单!!!
  19. 大象装企营销:学会这几招你也可以打造出高质量微信群
  20. 现实生活中和股市中人的量子纠缠现象探讨

热门文章

  1. 虚拟机dns服务器不可以,windows虚拟机中DNS服务配置
  2. 5M的开源桌面整理软件,麻雀虽小,功能十分强大
  3. 谷歌图像识别API向所有开发者开放
  4. powerbi使用说明_个人如何免费注册 PowerBI 账号(终极说明)
  5. 成功实现有线路由器和无线路由器连接上网
  6. 算法注册机编写扫盲---第二课
  7. 小马激活工具拒绝访问cannot open file c:\oemsf解决方法
  8. 电子警察系统设计(原理+流程+论文)
  9. 鲁大师7月新机性能/流畅榜:性能跑分突破123万!
  10. python开发bi报表_BI报表有什么优势