You need to enable JavaScript to run this app. C语言文件读取单测正常,整合至OpenSSL解密程序后输出卡顿
优惠活动
大模型
产品
解决方案
定价
更多

C语言文件读取单测正常,整合至OpenSSL解密程序后输出卡顿

程序卡在文件读取输出位置的核心原因

直接触发故障的笔误

  • 独立测试代码中用于存储文件文本的缓冲区是连续字符数组char c[1000],整合到完整代码时,你错将其定义为char *cas[1000]:该定义本质是由1000个未初始化字符指针组成的数组,每个元素都是指向随机内存地址的野指针,完全不具备存储文件文本的能力。
  • 执行fscanf(fptr, "%[^\n]", cas)时,函数会把读取到的文本直接写入cas数组首地址对应的内存区域(也就是第一个野指针指向的随机地址)。这种不受控的内存写入极易破坏标准库stdout的内部数据结构,后续执行printf("Data from the file:\n%s", cas)时,输出流逻辑已经被篡改,程序就会表现为卡在输出位置无响应。

修正方案:将char *cas[1000]修改为char cas[1000],和独立测试的缓冲区定义保持一致,从根源上避免野指针写内存的问题。

其他会造成“程序卡住”错觉的连带问题

  • 文件读取未做返回值校验:如果tester.txt是空文件,fscanf会返回EOF,缓冲区中全是随机脏数据,后续的打印、Base64解码操作都会触发未定义行为。
  • 解密函数存在缓冲区越界:代码通过malloc(ciphertext_len)申请与密文等长的内存块,后续直接给plaintext[plaintext_len] = 0设置字符串终止符,当解密得到的明文长度等于申请的内存长度时,会直接越界写入相邻内存,破坏程序正常运行状态。
  • 输出操作未及时刷新缓冲区:多处printf调用没有加结尾换行符,C语言默认行缓冲模式下,输出内容会一直滞留在内存缓冲区,不会真正输出到控制台,很容易被误判为程序卡住。
  • Base64解码逻辑未兼容带换行的密文格式:如果tester.txt中存储的Base64密文是多行带换行的格式,解码长度计算会出现偏差,导致后续解密循环运算逻辑异常,拉长程序响应时间,进一步强化“卡住”的观感。

内容的提问来源于stack exchange,提问作者Adeolu Temitope Olofintuyi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.24 17:36:03