news 2026/8/29 6:44:01

通讯录系统报错(二)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
通讯录系统报错(二)

一、结构体是“组合”(各占各屋),联合体是“共用”(挤在一屋)。

二、结构体定义格式typedef sturct 结构名{};结构名后不加小括号。

三、E0065错误,在定义结构体后应加上“;”,

四、初始化通讯录时不用进行判断,直接置0

五、定义通讯录变量未contact con;而传出初始化函数Initcontact(),为指针,则用取地址符号&。

即Initcontact(&con);

六、scanf("%d\n", &input);错误\n不能写里面会导致程序无法往下执行。

七、if (strcmp(p->per[i].name, name)) 修改为

if (strcmp(p->per[i].name, name) == 0) { // 必须判断等于0 return i; }。

八、若指针指向的元素内容为空NULL则表示分配内存失败,返回-1.

九、 exit(-1);exit(-1)= 给操作系统发信号:“程序出故障了,我立刻自杀!”
记住exit终结整个程序,而return只是终结当前函数

十、struct Person* new_arr = (struct Person*)realloc(ps->arr, new_capacity * sizeof(struct Person));

十一、free(ps->arr); // 释放堆上的数组

十二、不是函数调用,而是函数声明(声明了一个名为Checkcapacity、返回类型为void、参数为p的函数)。C语言编译器会将这行视为一个局部声明,不会生成任何调用指令。因此执行Addcontact时,程序会跳过这行,直接执行后面的printf,所以Checkcapacity函数从未被进入。不加返回类型直接调用Checkcapacity(),并且函数名要写正确。前面不加声明void.

十二、书籍推挤《深入理解计算机系统》,编程平台剑指offer。

链表节点

一、源文件函数大括号后不用写引号;。

二、 1. 创建新节点 struct PersonNode* newNode = (struct PersonNode*)malloc(sizeof(struct PersonNode));且要判断是否创建失败。

三、排序时候,判断两个节点后无论大小前指针往后移动,因此写道判断外面。

四、冒泡排序。前指针每轮循环从头到尾。尾指针固定在最后,由于每轮循环排好最后一个节点,因此每轮后,可以让尾指针往前移动一位。那么该如何移动呢,借助前指针,前指针每轮移动到倒数第二,然后尾指针指向前指针位置即可。

五、冒泡排序。内层循环条件(pre->next!=ret),外层循环使用一个swapped变量。交换则置为1,否则为0。

六、且do while(){}后加引号;。

七、switch内语句退出用beak;不用return。

八、引发了异常: 读取访问权限冲突。 **ret** 是 nullptr。当循环第二次判断while (pre != NULL)时,pre已经为NULL,循环结束,但在循环体内最后一行ret = ret->next;已经在第一次迭代时执行了,此时retNULL,所以ret->next触发了非法访问。需要将while内改为while(ret!=NULL);

九、C6054 是一个代码分析警告,表示传递给需要零终止字符串的函数的字符串可能未正确零终止。这可能导致缓冲区溢出或程序崩溃,因此需要确保字符串以\0结尾。

十、fwrite用于将数据块写入文件:fwrite(&(cur->data), sizeof(Person), 1, fp);

  • ptr:指向要写入数据的内存起始地址(通常是你结构体变量的地址)。

  • size:每个数据单元的大小(字节数)。

  • count:要写入的数据单元个数。

  • stream:文件指针(fopen的返回值)。

这 4 个函数是 C 标准 I/O 库的“四大金刚”,它们共同构成了文件操作的完整生命周期

  1. fopen:打开文件(获得操作权限)。

  2. fwrite/fread:读写文件内容(传输数据)。

  3. fclose:关闭文件(释放资源并确保数据落盘)

十一、文件的读写操作 笔记

十二、int file_size = 0;
fread(&file_size, sizeof(int), 1, fp);
for (int i = 0; i < file_size; i++) {
struct PersonNode* newnode = (struct PersonNode*)malloc(sizeof(struct PersonNode));
fopen(&newnode, sieozef(struct PersonNode), 1, fp);
if(newnode==NULL){

printf("加载时内存分配失败\n");

break;}

if(fread(&newnode->data,sizeof(struct person),1,fp)!=1){

printf("内存分配失败“);

free(newnode);

break; }

newnode->next = p->head;
p->head = newnode;
}
fclose(fp);
printf("文件读取成功\n");

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/29 6:41:35

3D可视化平台推荐:主流工具对比与适用场景

3D可视化平台广泛应用于数字孪生、智慧城市、工业制造等领域&#xff0c;从开源渲染库到商用数字孪生平台&#xff0c;选择众多。本文围绕"3D可视化平台推荐"这一需求&#xff0c;梳理主流工具的类型、能力与适用场景&#xff0c;帮助按需选型。 3D可视化平台有哪些…

作者头像 李华
网站建设 2026/8/29 6:41:23

从RNN到Prompt微调:生物医学NLP零基础学习路线与实战

在医学文献、电子病历、临床指南、基因注释这些资料里&#xff0c;藏着一大批高质量文本数据。生物医学背景的同学往往比一般工程师更懂这些数据的含义&#xff0c;却在面对算法模型时容易卡住。很多医学生想转AI方向&#xff0c;第一反应是去刷公开课&#xff0c;刷到RNN就开始…

作者头像 李华
网站建设 2026/8/29 6:39:52

springboot高校在线学习平台系统75526-计算机课程设计、毕业设计

前言 博主介绍&#xff1a;一线全栈工程师&#xff0c;毕设实战引路人。技术栈覆盖Java、Python、C#、PHP、Node.js及UniApp跨端开发&#xff0c;擅长多语言项目落地与架构设计。持续分享毕设源码、开题报告、技术选型心得与职场踩坑经验。用工程化思维写代码&#xff0c;帮你…

作者头像 李华
网站建设 2026/8/29 6:39:44

从虚拟到现实:TVA具身智能体的Sim-to-Real解析

前沿技术探索&#xff1a;TVA智能体&#xff08;简称TVA&#xff09;TVA智能体&#xff08;亦称“AI智能体视觉”或“TVA视觉智能体”&#xff09;是依托Transformer架构与“因式智能体”理论构建的通用视觉技术体系。它有机融合深度强化学习&#xff08;DRL&#xff09;、卷积…

作者头像 李华
网站建设 2026/8/29 6:39:31

Node.js 从安装到写出第一个Web应用:环境配置与常见报错排查

你是不是也被“一小时学会 Node.js&#xff0c;从安装到写出第一个 Web 应用”这句话吸引过&#xff1f;但真实经历往往是&#xff1a;一小时全花在安装上。下载 Node.js 安装包&#xff0c;下一步下一步&#xff0c;然后在命令行敲下node -v&#xff0c;却得到一句“node 不是…

作者头像 李华