发布时间:2026/9/4 17:18:00
通信录系统三(指针,双链表) 先说结论能编译通过、能生成 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/9/4 17:12:59

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

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

2026/9/4 17:12:59

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

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

2026/9/4 18:13:08

基于SpringBoot的企业知识库问答系统毕业设计项目源码

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/9/4 18:13:08

带宽:GPU 的粮道在哪里堵住了(发烫优化系列 · 第 2 篇)

上一篇我们说过一个反直觉的结论:手机发烫,烧的不是"算力",而是"搬运"——Arm 官方给出的数字是 DRAM 访问每 GB/s 要付 80–100mW 的电。 这一篇把这个结论的物理基础彻底讲透:带宽到底是什么、为什么在手机…

2026/9/4 18:13:08

基于SpringBoot的汽车咨询管理系统的设计与实现毕业设计项目源码

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/9/4 18:13:08

K8S LVM扩容-【20260902】001篇

文章目录 一、根目录扩容(剩余约 95GiB 全部给 `/`) 1.1 新建分区 /dev/sda3(类型 LVM) 1.2 让内核重读分区表 1.3 扩容 LVM 与文件系统 二、部署 NFS Server 2.1 修复 yum 源(CentOS 7 EOL 必做) 2.2 创建共享目录 2.3 配置 /etc/exports 2.4 固定端口(便于防火墙放行)…

2026/9/4 18:13:08

全桥电路与PWM控制:从逆变到整流的统一硬件平台解析

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

2026/9/4 18:08:08

工业视觉实战:基于全连接神经网络的喷码字符识别系统构建

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

2026/9/3 18:28:26

vSound小提琴数字处理器实操指南:从接线到演出的完整配置

电小提琴或者原声小提琴插电演出,第一个绕不开的坎就是声音难听。原声琴的共鸣和空气感一旦进了拾音器,出来的往往是一坨干瘪、发尖、带着奇怪塑料味的信号。我当初第一次把琴接上乐队调音台,直接被主唱吐槽"你这声音像在锯钢丝"。…

2026/9/3 14:29:47

传感器接口IC如何攻克生物化学传感的微弱信号难题?

1. 从电极到比特流:为什么生物化学传感必须依赖专用接口IC 做生物化学传感的人都有过类似的经历:明明传感器本身性能很好,信号输出却一塌糊涂——噪声大、漂移明显、重复性差,怎么调都达不到预期。很多时候问题并不在传感器&#…

2026/9/3 14:30:35

STM32F411CEU6多通道ADC采集:扫描模式+DMA实现详解

1. 多通道 ADC 的用武之地把“Multichannel ADC”和“STM32F411CEU6”这两个关键字放在一起,其实就是嵌入式开发里最常遇到的一类需求:用一块不算贵的 MCU,同时采集多路模拟信号。STM32F411CEU6 是 48 引脚的 Cortex-M4F 主控,主频…

2026/9/4 0:00:58

STM32H743 SPI从机DMA双缓冲通信实战

简介:本资源是面向嵌入式开发工程师与STM32进阶学习者的SPI DMA双机通信从机端完整实现方案,聚焦STM32H743高性能Cortex-M7单片机在工业控制与高速数据交互场景下的从机通信开发痛点。压缩包含1355个文件,主体为599个C源码与321个头文件&…

2026/9/4 0:00:58

CPU开盖降温教程:20元成本让温度直降30度的原理与实践

最近很多朋友都在抱怨,自己的电脑一到夏天就变成"烤箱",玩游戏时CPU温度动不动就飙到90度以上,风扇噪音堪比直升机。更让人头疼的是,明明配置不错,却因为高温降频导致性能大打折扣。如果你也遇到了类似问题&…

2026/9/4 0:00:58

ArkTS 表单工程:场地预约页的三态场次 Grid 与校验

ArkTS 表单工程:场地预约页的三态场次 Grid 与校验 App 14「运动场地预约」场地 Tab(Func1Tab),是整 App 交互最丰富的页面——场地横向切换 三色图例 渐变预约预览卡 快捷模板 今日场次 Grid(可选/已选/已满三态&…

2026/9/3 20:43:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/3 17:51:43

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/3 21:06:57

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…