通信录系统三(指针,双链表)

发布时间:2026/10/29 23:10:13

通信录系统三(指针,双链表) 先说结论能编译通过、能生成 exe编译器只报了 2个警告真正的问题集中在逻辑层其中有两个会直接崩溃/死循环。按严重程度排序如下。---一、崩溃级错误必改会损坏内存/程序崩溃1. contact.c:211 — 文件读取写进了指针变量本身且结构体大小读错fread(newnode, sizeof(struct PersonNode), 1, fp) // ← 严重错误- newnode 是 PersonNode**把整个结构体的字节写进栈上的指针变量8 字节里后面还照读 104 字节 → 栈被破坏newnod变成垃圾值运行必崩。- 且读的是 sizeof(PersonNode)而 Savecontactcontact.c:195写入的是 sizeof(structPerson)——存/读格式不一致即使去掉 也会把记录读串位。- ✅ 应改为fread(newnode, sizeof(struct Person), 1, fp)2. contact.c:58-78 —删除时循环永不推进删除失败即死循环while (cur ! NULL) {if (strcmp(cur-data.name, name) 0) { ... }} // ←循环体内没有 cur cur-next;- cur 永远停在 head。只有删除的是表头才能成功删任何一个中间/尾部联系人或名字不存在时 →无限死循环。- ✅ 循环末尾补 cur cur-next;。---二、逻辑错误功能做错需改3. contact.c:89 —修改联系人用错判断if (strcmp(cur-data.name, name) 1) // 应为 0- strcmp 只保证 0相等、0/0不等1 仅在首个不同字符恰好差 1 时才成立 →几乎永远找不到修改功能基本失效。- ✅ 改为 0。4. test.c:34-60 —菜单与枚举错位 缺少排序选项- 枚举顺序是 MODIFY3, SEARCH4但菜单写的是 “3.查找联系人 4.修改联系人”→用户选 3 实际执行的是修改选 4实际执行查找两个功能对调了。- 菜单有 “6.按名字进行排序”但switch 里没有 case SORT: →选 6 直接掉进 default 报错排序功能完全用不了。- ✅ 把菜单 3/4 文字对调并补上 case SORT: Sortcontact(con); break;。5. contact.c:215-216 —加载时 prev 未初始化newnode-next NULL;newnode-next NULL; // ←重复第二行本应 newnode-prev NULL;- 链表头节点的 prev 是 malloc 的随机垃圾值。Deletecontact 里用 cur-prev ! NULL 判断可能把垃圾当指针用 →随机崩溃。- ✅ 第二行改成 newnode-prev NULL;。---三、编译警告能过编译但应修6. test.c:2 —warning C4067#include test.h; // ←include 后面不能加分号- ✅ 去掉行尾 ;。7. test.c:3 —warning C4431menu() 缺返回类型隐式 intmenu() { ... }- C 已不支持默认 int建议改成 void menu(void)且声明进 test.h。---四、健壮性隐患新手阶段可后续加强- scanf(%s, ...) 无宽度限制contact.c:18,20,24,26,56,86,93,95,99,101,112输入超过 NAME/PHONE数组容量就缓冲区溢出。建议写成 scanf(%19s, ...) 等。- scanf(%s, newnode-data.name) 的 是错的contact.c:18、20、24、26、93、95、99、101数组名 是char(*)[20]%s 要的是 char*。碰巧能跑但属于类型不匹配应去掉 。age 的 是对的。- test.c:38,62 —int main() 里 return; 不带值MSVC 不报错我实测验证过但 GCC/Clang 会当错误且 main的返回值不确定。建议 return 0;。- test.c:33 —scanf(%d, input) 输入非数字时会失败input 保持旧值 →菜单死循环。建议检查 scanf 返回值。- contact.c:229 —提示信息写的是 contacts.dat实际文件名是 contacts.data错字。---五、补充说明- 刚才 Rebuild 报的 LNK1104: 无法打开 test0826.exe 不是代码问题——exe正被运行中的程序占用你说的已经在桌面打开应该就是这个程序在跑关掉程序再编译即可。- 源码是 GBK 编码在 VS 里正常用其它工具按 UTF-8 打开会显示乱码属正常现象不是错误。---注意两点1. exe 还在运行中之前 Rebuild 报 LNK1104 就是因为程序被占用。先在桌面上关掉正在跑的那个通讯录程序再去 VS里重新编译否则还会报无法打开 exe。2. 旧数据文件兼容旧代码的保存Save本来写的就是 struct Person新的加载改用相同大小所以现有 contacts.data能正常读出来。文件保持了原来的 GBK 编码、CRLF 换行和 Tab 缩进VS 里中文显示正常。插入《数据结构》通讯录搜索优化增加哈希表。降低查找时间复杂度
延伸阅读

更多相关文章

2026/10/22 6:24:47

单片机毕业设计-基于 STM32/51 单片机的重量检测式智能饲喂装置开发 基于 STM32/51 单片机的定时步进电机投喂控制系统设计(023906)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/10/22 6:24:47

流量趋势 + SEO检测工具:旧文要不要改标题的数据判断法

标签:SEO检测工具 流量趋势 标题优化 数据驱动 SEO 检测 不只静态扫描,还看 流量趋势——回答「这篇还要不要投入修改成本」。 1. 三种典型曲线 缓降:内容老化,更新比新写划算平盘:长尾稳定,微调元数据即…

2026/10/29 23:05:38

AI编程沟通困境与迭代式开发实践

1. 当AI编程遇上沟通困境:为什么我们总是又累又气? 上周三凌晨两点,我第17次删光了AI生成的代码。屏幕上的红色报错信息仿佛在嘲笑我的天真——这已经是连续第三个通宵和AI编程工具较劲了。相信很多同行都有过类似经历:明明输入了…

2026/10/29 23:05:38

HTML5多图上传预览与压缩:FileReader/Blob URL实战

简介:面向Web前端初学者与开发者的HTML5多图片上传预览示例源码,聚焦File API与拖放API的本地文件读取和即时预览,无需服务器端交互即可完成多图选择、缩略图展示与拖拽上传交互,适合用来理解现代浏览器文件处理流程。压缩包共18个…

2026/10/29 23:05:38

HyperDbg:基于VT-x/EPT的本机ring0内核调试与EPT Hook实践

简介:Hyperdbg 是一套面向 ring0 内核级调试的完整源码资料,适合驱动程序开发者、操作系统学习者与安全研究人员用来理解内核调试器的实现思路,应对系统调用跟踪、中断处理分析、内核内存异常排查等场景。压缩包共 93 个文件,约 2…

2026/10/29 23:05:38

React性能优化:caveman模式下的useMemo、token与npx实战

1. “caveman”不是远古人,是React开发里一个被低估的性能优化暗号最近在几个前端技术群和React项目复盘会上,频繁看到“caveman”这个词被老手们随口提起——不是指洞穴壁画或石器时代,而是特指一种极简、原始、不依赖任何现代抽象层的React…

2026/10/29 23:05:38

企业软件行业困境与数字化转型的破局之道

1. 企业软件产业的困境与挑战最近和几位做企业软件的老友聊天,听到最多的一句话就是:"这行真是越来越难做了。"作为在这个行业摸爬滚打十几年的老兵,我亲眼目睹了国内企业软件市场从萌芽到繁荣,再到如今陷入困境的全过程…

2026/10/29 23:00:35

大模型微调技术与LoRA实战指南

1. 大模型微调的核心逻辑与价值定位大模型微调的本质是在预训练模型基础上进行二次训练,使其适配特定领域或任务的过程。不同于从零训练需要海量数据和算力,微调只需相对少量的领域数据就能显著提升模型在目标场景的表现。这种技术路径之所以成为行业标配…

2026/10/29 17:05:52

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/29 17:06:02

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/29 17:06:13

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/29 0:03:42

学生选课系统DFD图绘制指南:边界划分与分层校验实战

简介:文档以顶层与第一层DFD图为核心,完整刻画学生选课系统的逻辑模型,面向软件工程课程设计、系统分析学习及毕设前期建模人群。顶层图界定系统边界,外部实体包括管理员、教师和学生三类角色;第一层图进一步细化用户登…

2026/10/29 0:03:42

JIRA敏捷落地:Scrum角色权限、Sprint与燃尽图避坑指南

简介:围绕“基于JIRA的敏捷开发项目管理”这一主题,面向产品负责人、Scrum Master及研发测试成员,梳理Scrum角色分工、迭代流程与JIRA工具配置的对应关系,适合初、中级团队导入敏捷管理时参考。压缩包共1个docx文件,大…

2026/10/29 0:03:42

SEMI S8人机工程验收实战:从条款拆解到现场实测的完整指南

简介:面向半导体设备设计、制造与运维工程师及安全合规人员,这份资料聚焦SEMI标准体系下的设备安全规范,重点收录SEMI S8-0308《半导体制造设备人体工程学工程安全指南》。内容围绕设备设计原则、错误与事故预防、人体工程学适配三大主线展开…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑