小恶意代码识别器(5)
AI 给的代码不能全信一次真实的取舍这份作业最有意思的地方是它明确把和大模型协作当成考核内容其中一项要求是学生要设计有约束的提示词理解 AI 给的候选代码发现并修正至少一项问题。也就是说用 AI 是允许的但不能照单全收。这篇记录我遇到的一次真实抉择。事情的起因写完读取函数之后我把代码拿给另一个大模型做审查问它这段解析有没有问题。它给了挺长一段回复指出sscanf有几个已知的漏洞然后给了一套完整的改法用strchr手动切分每一列用strtod代替sscanf做数值转换再检查 NaN 和无穷大另外还要处理行尾多余的列、字段前后的空格等等。它说得对不对大部分是对的。比如sscanf确实会放过行尾多出来的内容if (x 0 || x 8)这种写法确实拦不住 NaN因为 NaN 和任何数比较都是假。这些都是真的知识。它甚至还主动说明可以帮我直接把这几处改出来。我为什么没有全盘采纳问题不在技术在我自己。那套改法里有大量指针操作手动切字符串、移动指针、处理结尾符而我当时刚学到结构体指针只懂基础用法。就算我把代码复制过去能跑通我也讲不清楚每一行在干什么。而任务书里写得很明确不得仅提交模型生成的完整程序却无法解释其原理考核方式是个人答辩重点核验学生是否真正理解核心代码。照抄一套讲不明白的代码等于自己把答辩这条路堵死。所以我的判断是能讲明白的八十分胜过讲不明白的一百分。逐条评估之后的做法我没有全盘接受也没有全盘否定而是把它的建议拆开一条条看。采纳的第一条是表头校验。原来的代码无条件跳过第一行如果拿到的文件根本没有表头后面的解析就全错了。加一个检查看第一行里有没有约定的字段名没有就拒收。这个用strstr一行搞定我能讲清楚。采纳的第二条是缓冲区放大。原来行缓冲是 256 字节如果某一行特别长fgets会把它截成两半后半截被当成新的一行解析可能存进错误的数据。改成 1024一个数字的事。采纳的第三条是截断提示。原来样本数超过上限时直接break就停了用户不知道数据被截断。在跳出循环前加一句提示让人知道发生了什么。没采纳的是用%c抓行尾多余内容那条。它能挡住多出一列的情况但属于边缘用例任务书的最低测试要求里没有这一项。我没做但我知道自己放弃了什么遇到多列的文件我的程序会接受而不是拒绝。这个决定我记在 AI 交互记录里了。完全拒绝的是那套整体重写方案。理由不是它不好是它超出我现阶段能掌握的范围。我把它当成一次学习知道了有strtod这种更严谨的做法知道了浮点数 NaN 的特性但代码还是用我自己能讲清楚的版本。这件事给我的启发第一AI 的建议要分类看。有些是必须改的正确性问题比如除零、数组越界这些要改有些是更工程化的做法比如用strtod代替sscanf这些是进阶方向可以知道但不一定要马上用还有些是过度设计对当前场景没有实际收益。第二知道自己放弃了什么比全都照做更能体现判断力。任务书要求的 AI 交互记录里有一栏是采纳、修改或拒绝的理由写清楚评估后认为属于边缘情况暂未采纳已知某类用例会被接受这是有理有据的取舍比含糊地全抄要好。第三验证的责任在人不在于模型。AI 给的代码能编译不等于正确能跑通也不等于符合需求。我那个 count 没清零的 bug程序照常运行、数字照常打印只有拿不同输入对比测试才暴露出来。编译器查不出逻辑错误模型也不一定看得出只有自己跑测试。一条底线整个作业过程中我给自己定了一条线正式提交的源文件里的代码必须是我自己敲的而且每一行我都能说出它在干什么。AI 用来讲思路、解释报错、审查代码、提供测试建议这些都是明确允许的但代码本身要自己写。这条线不是形式主义。答辩的时候老师指着某一行问为什么这么写答得上来才算真的会了。测试、交付以及一个跨 IDE 的坑程序写完只是完成了一半这份作业的后半程是测试和交付。这篇记录这部分做了什么以及中间踩到的一个环境坑。测试要覆盖正常和异常任务书里给了一张最低测试要求表一共八项每一项都写清了预期行为。测试的时候要记录输入样本、实际输出、预期输出和是否通过不能只凭能编译、能运行判断正确。八项分别是合法 CSV 能读取并显示摘要文件不存在时提示打开失败且不崩溃数据为空时拒绝训练标签为 2 或 -1 时拒绝比例特征为 1.3 时拒绝包含非数字字段时报告格式错误模型尚未加载时拒绝无效预测模型保存后重新加载同一输入的预测结果要一致。老师还额外给了十几份故意做坏的测试文件对应空文件、非法标签、比例越界、熵越界、非数字、缺失字段、多余列、空白行等各种情况。这些文件不是装饰是拿来验证异常处理真的生效的。我自己加测了一项连续加载不同的文件。就是这一项暴露了count没清零的 bug读空文件时仍然显示上次的条数。一个跨 IDE 的坑我把代码发给同组的同学他用 Visual Studio 打开编译通过运行却提示找不到文件。我这边同样的代码完全正常。原因不是代码是相对路径。../data/sample.csv这种写法是相对于程序运行时所在目录的不同 IDE 运行程序时默认的目录不一样。CLion 下程序的工作目录是源码所在目录所以能找到Visual Studio 默认用的是项目文件所在目录../data指过去根本没有东西。在 Visual Studio 里的解决办法是新建空项目把 .c 文件加进去然后右键项目而不是右键文件打开属性在配置属性 - 调试里把工作目录改成源码所在的完整路径。还有个更省事的办法运行的时候直接输入文件的绝对路径从盘符写到文件名不管什么 IDE、工作目录在哪都能找到。另外要注意的是直接把 .c 文件拖进 Visual Studio 打开属于杂项文件没有项目属性页里是找不到调试选项的必须先建项目。交付时要给什么代码之外要提供的是编译运行说明这部分正好是实验报告里运行环境、编译方法与系统展示那一节的内容。编译命令是gcc -stdc11 -O2 -Wall -Wextra -pedantic recognizer_starter.c -lm -o recognizer.exe-lm是链接数学库预测函数里用到了exp。还要说明文件结构不能被打乱因为程序按相对路径读数据。如果需要把项目发给别人整个文件夹打包成压缩包再传聊天工具一般不支持直接发送文件夹而且打包能保住目录结构。如果对方只是想看效果也可以直接给编译好的 exe双击运行时系统会把工作目录设为 exe 所在的目录不需要任何配置。报告和个人记录实验报告的结构任务书里给了建议项目背景与安全边界、总体设计与数据结构、关键模块实现、测试与结果分析、AI 协作记录与团队分工、总结反思。正文重点解释关键代码完整源码作为附件单独提交。结果数据必须来自实际运行不能套用演示值。个人要另交三组 AI 交互记录和一份反思。记录要包含原始提示词、模型给的关键建议、自己采纳或拒绝的理由、以及用什么方式验证的。反思要写清楚 AI 在哪些环节提供了帮助、哪些建议经过人工修改、为什么必须验证 AI 生成的程序、误报和漏报可能带来什么后果。最后一项容易被忽略所有分类输出都要注明仅作教学性判断不能据此宣称具备真实的恶意代码检测能力。总结回头看这整个项目技术上用到的是文件读写、结构体数组、循环和函数都是课程内的内容难的是把它们组织成一个完整的、能应对异常输入的程序。更有价值的其实是另外两件事一是养成了写完就测的习惯编译器查不出的错误只能靠测试发现二是学会了跟 AI 协作的边界用它提效但保留自己的判断交付的东西必须自己讲得清楚。

相关新闻

瑞华丽PLM破解汽车零部件多品种小批量困局,赋能精益研发与智能制造

瑞华丽PLM破解汽车零部件多品种小批量困局,赋能精益研发与智能制造

破局“多品种、小批量”:瑞华丽 PLM 赋能汽车零部件企业精益研发与智能制造 这几年走访了不少汽车零部件工厂,越来越明显的一个感受是:过去那种“一款产品吃三年、一条产线跑到底”的好日子,已经彻底过去了。主机厂为了抢占细分市…

2026/10/15 16:17:45 阅读更多 →
彻底搞懂CSS弹性布局:从轴概念到实战避坑指南

彻底搞懂CSS弹性布局:从轴概念到实战避坑指南

1. 为什么弹性布局值得你花时间彻底搞懂做前端这些年,我见过太多人把 Flex 当成"能居中就行"的工具。问起来就是display: flex加justify-content: center加align-items: center,三件套背得滚瓜烂熟,可一旦遇到子项宽度被压缩、换行…

2026/10/15 16:17:45 阅读更多 →
Android 移植 OctoPrint 实战:Kotlin 壳嵌入 Python 运行时

Android 移植 OctoPrint 实战:Kotlin 壳嵌入 Python 运行时

简介:这份资源是 Octo4a 项目的完整源码包,面向没有树莓派却希望远程控制 3D 打印机的 Android 用户与 Kotlin 开发者。它把 OctoPrint 主机能力搬到手机端,让用户无需 Linux 基础即可在 Android 设备上完成部署,解决硬件成本高、…

2026/10/15 16:17:45 阅读更多 →

最新新闻

C#串口通信三菱PLC实战:MC协议3E帧稳定读DWord与心跳保活

C#串口通信三菱PLC实战:MC协议3E帧稳定读DWord与心跳保活

简介:本资源是一套基于C#实现串口与三菱PLC通信的完整工程实践方案,面向工业自动化领域的初/中级.NET开发者及工控系统集成工程师,解决PLC底层数据交互中单点/批量布尔量、Word/Dword数值读写、心跳监测与多线程稳定通信等核心问题。压缩包共…

2026/10/15 18:08:19 阅读更多 →
CoreNote 技术架构与自托管完全指南

CoreNote 技术架构与自托管完全指南

说明:本文所有命令、配置项与参数均取自 GitHub 仓库 zhangjianxin477/CoreNote 的 README 与 deploy/ 目录。文中凡标注「官方未明确」之处,一律以官方文档为准,不做推测。仓库的内部项目名为 Knowledge Hub,克隆地址是 knowledg…

2026/10/15 18:08:19 阅读更多 →
Android Native音频低延迟实战:从AAudio到Oboe的端到端优化

Android Native音频低延迟实战:从AAudio到Oboe的端到端优化

1. 为什么“Android native音频”不是一句空话,而是真实存在的性能瓶颈在某跨平台音视频项目中,我们曾遇到一个典型场景:用户点击“开始录音”按钮后,UI线程响应正常,但实际音频数据流从麦克风采集到App层回调之间&…

2026/10/15 18:08:19 阅读更多 →
Linux下Qt开发贪吃蛇:从环境搭建到游戏逻辑完整实战

Linux下Qt开发贪吃蛇:从环境搭建到游戏逻辑完整实战

简介:基于Linux与Qt开发的贪吃蛇小游戏完整工程,面向C/Qt初学者、Linux开发爱好者以及需要课程设计的在校生。项目实现了界面显示、游戏逻辑、等级管理、背景音乐、英雄榜和帮助等核心功能,交互完整,可用于理解Qt绘图、事件处理与…

2026/10/15 18:08:19 阅读更多 →
世界地图GeoJSON数据选型与压缩:从全球底图到国家级边界

世界地图GeoJSON数据选型与压缩:从全球底图到国家级边界

简介:这份资源面向地理信息开发、地图可视化与GIS教学研究者,提供覆盖全球国家边界的世界地图GeoJSON数据集,可用于构建交互式世界地图、开展地理空间分析或作为服务端地理信息API的数据基础。压缩包共约2000个文件,以3443个json文…

2026/10/15 18:08:19 阅读更多 →
51单片机AD转换实战:ADC0804接口设计与精度优化

51单片机AD转换实战:ADC0804接口设计与精度优化

1. 项目概述:为什么51单片机的AD转换至今仍是入门必修课你打开任何一本单片机实验指导书,翻到第三章,十有八九是“ADC0804与51单片机接口”;你在某高校电子系实验室里看到学生焊的最小系统板,杜邦线一端连着电位器旋钮…

2026/10/15 18:07:18 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →