首页 > 其他分享 >项目:通讯录

项目:通讯录

时间:2024-07-17 22:09:20浏览次数:7  
标签:struct 项目 char person 字符串 通讯录 缓冲区

通讯录

需求分析

  • 创建联系人-insert

  • 删除联系人-delete

  • 搜索联系人-search

  • 输出所有联系人-traversal

  • 保存文件-save-存储方式key:value的实现

  • 加载文件-load-将键值对读入并加入到存储结构中

架构分析

 

实现分析

底层实现

采用链表实现,因此要定义通讯录结构体,并定义链表的基础操作insert、remove。这里可以直接使用宏定义函数实现。

接口层实现

接口层要实现的函数接口是-add-delete-search-traversal

业务逻辑层

业务层实现的封装是-insert-delete-print-search-save-load

解包和压包

这里将接口层和支持层结合在了一起,解包包括读和写

 

复盘问题

  1. 如何进行struct person中的业务和数据结构分离?

     struct person {
         char name[MAXNAME]; // 业务
         char phone[MAXPHONENUMBER]; // 业务
         struct person* pre; // 数据结构
         struct person* next; // 数据结构
     };

    思路:将业务剥离出去重新成为一个结构体。

     struct person{ // 业务结构
         char name[MAXNAMELENGTH];
         char phone[MAXPHONENUMBER];
     };
     struct node{ // 数据结构
         struct person* person;
         struct node* pre;
         struct node* next;
     };
  2. linux如何解决scanf溢出问题?

    • 通过%n限制读入长度

    • 使用更安全的函数fgets代替,注意要fgets前使用getchar()清空缓冲区,

    • 通过fllush(fp)刷新缓冲区,使其写入到文件

  3. 为什么要使用二级指针? 解决链表初始空结点因传参无法修改而无法创建头节点的问题。

  4. memcpystcpy的异同点

    memcpy用于复制内存块,可以用于任意类型,需要指定n,数量太大会发生溢出,需要手动处理终止字符串,更加底层,一定条件下速度更快;strcpy用于复制字符串,终止于空字符串,只适用于字符串,是不安全的,必须保证目标缓冲区能够容纳源字符串

  5. fflush(fp)会自动刷新与fp相连的缓冲区

  6. segment fault错误如何产生的?

    数组越界,或者访问空指针指向的内容,案例如下:

    fgets如果获取为空,就会引发segment fault,因为返回了空指针。

标签:struct,项目,char,person,字符串,通讯录,缓冲区
From: https://www.cnblogs.com/solicit/p/18308397

相关文章

  • 我从 Python 潮流周刊提取了 800 个链接,精选文章、开源项目、播客视频集锦
    你好,我是豌豆花下猫。前几天,我重新整理了Python潮流周刊的往期分享,推出了第1季的图文版电子书,受到了很多读者的一致好评。但是,合集和电子书的篇幅很长,阅读起来要花不少时间。所以,为了方便大家阅读,我打算将合集进一步整理,分门别类将原始内容的标题罗列出来。本文总计约800......
  • GitHub每日最火火火项目(7.17)
    项目名称:aider项目介绍:aider是一个在终端中实现AI结对编程的项目。它能够为开发者提供智能的编程辅助,帮助开发者更高效地完成编程任务。通过与AI的协作,开发者可以获得实时的代码建议、错误修复提示等,从而提高编程效率和质量。项目地址:https://github.com/paul-gauthi......
  • IT项目常用考核指标
    在IT项目管理中,考核指标是用来评估项目进展和成果的重要依据。以下是一些常用的IT项目考核指标,包括具体的指标名称、计算公式、基准达标值以及常见问题:1项目进度准时率项目的生命线是什么?没错,是时间!项目进度准时率,衡量的是项目是否按照既定时间节点推进。记住,时间就是金钱,延误......
  • 项目方案:图码联侦平台助力社会治理、维护公共安全
    目录一、背景1、现状分析2、应对方式2.1联合办公2.2协作沟通平台2.3数据融合作战二、图码联侦介绍1、数据融合作战的概念2、图码联侦概述3、图码联侦作用3.1提升案件侦破效率3.2强化公共安全3.3助力社会治理3.4提高应急响应能力4、图码联侦与数据融合作战的......
  • whisper-api语音识别语音翻译高性能兼容openai接口协议的开源项目
    whisper-api介绍使用openai的开源项目winsper语音识别开源模型封装成openaichatgpt兼容接口软件架构使用uvicorn、fastapi、openai-whisper等开源库实现高性能接口更多介绍[https://blog.csdn.net/weixin_40986713/article/details/138712293](https://blog.csdn.net......
  • OceanBase 金融项目优化案例(union all 改写)
     在工单系统上看到有一条sql问题还没解决,工单描述看到压测场景被cpu资源被这条sql打爆,目前影响到项目进度,比较紧急。直接联系这位同学看看是否需要帮忙。慢SQL:SELECTtask.*,sc01.aab300......
  • 【java计算机毕设】网上购书管理系统MySQL servlet JSP项目设计源代码 期末寒暑假作业
    目录1项目功能2项目介绍3项目地址1项目功能【java计算机毕设】网上购书管理系统MySQLservletJSP项目设计源代码期末寒暑假作业小组作业 2项目介绍系统功能:servlet网上购书管理系统包括管理员、用户两种角色。管理员功能包括订单管理(已处理,未处理),顾客管理(添......
  • 2024-07-17 vite打包vue项目,无法正确加载,报错:TypeError: Failed to resolve module sp
    我这会打算打个包扔到线上看看效果,结果线上报错:TypeError:Failedtoresolvemodulespecifier"vue".Relativereferencesmuststartwitheither"/","./",or"../".奇怪,之前还好好的,因为本地调试什么的都正常,甚至昨天都可以打包。我不信邪,遂新建vue项目,做一下测试,这......
  • Docker部署Java项目
    部署项目前言:在自定义java服务镜像之前,最好本地用java-jar命令先执行下jar包,确保jar包没有问题1.创建Dockerfile镜像文件#指定基础镜像,必须为第一个命令(尽量不要定义的偏差太大)fromopenjdk:8-jdk-alpine#将本地文件添加到容器中addxxx.jarxxx.jar#后端项目......
  • 探讨开源项目的机遇与挑战
    ✨✨欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨......