C语言字符串与内存库函数:考试复习笔记

发布时间:2026/10/9 9:00:29

C语言字符串与内存库函数:考试复习笔记 附图完整梳理字符分类、字符串、内存全套库函数知识体系全部函数基础用法已有完整梳理本文不再赘述。本文围绕字符串核心库函数、内存操作函数两大核心难点展开解析前者依托 ‘\0’ 结束标志讲解各类字符串函数的使用与模拟实现后者针对内存字节操作内存重叠易错实操场景逐一阐述。文章目录字符串核心库函数结合 \0 结束标志剖析strlen 使用与模拟实现strcpy 使用与模拟实现strcmp 使用与模拟实现strcat 使用与模拟实现内存操作函数依托内存字节实操场景阐释memcpy 使用与模拟实现memmove 使用与模拟实现内存重叠场景辨析字符串核心库函数结合 \0 结束标志剖析C语言字符串函数依赖 ‘\0’ 作为结束标志只适用于以空字符结尾的字符串。strlen 使用与模拟实现size_tstrlen(constchar*str)语法解读返回值size_t无符号整型代表字符计数结果参数const char * str接收字符串起始地址const保护原字符串不可被修改功能统计 \0 之前有效字符个数 \0不计入易错点遇到\0就停止不会读取数组全部空间无符号数相减容易出错| 模拟实现完整可运行代码#includestdio.h#includeassert.hsize_tmy_strlen(constchar*str){size_tcount0;while(*str!\0){count;str;}return0;}intmain(){chararr[]hello;size_tlenmy_strlen(arr);printf(%zu\n,len);return0;}strcpy 使用与模拟实现char*strcpy(char*destination,constchar*source)语法解读返回值、参数规则与strcat大体一致返回值char*返回目标空间起始地址支持链式调用参数1char * destination目标地址必须可修改参数2const char * source源字符地址const保证源数据只读功能把源字符串拷贝到目标空间连同\0一起复制易错点遇到\0停止拷贝目标空间必须足够目标内存必须可写| 模拟实现完整可运行代码#includestdio.h#includeassert.hchar*my_strcpy(char*dest,constchar*src){char*retdest;assert(destsrc);while(*src!\0){*dest*src;dest;src;}*dest*src;// \0解决了return0;}intmain(){chararr1[20]{0};chararr2[]world;my_strcpy(arr1,arr2);printf(%s\n,arr1);return0;}strcmp 使用与模拟实现intstrcmp(constchar*str1,constchar*str2)语法解读返回值int比较结果正数 / 0 / 负数参数两个入参都是const char*字符串只读不可修改功能按ASCII逐字符比较两个字符串易错点遇到\0结束比较只比较ASCII值不比较字符串长度| 模拟实现完整可运行代码#includestdio.h#includeassert.hintmy_strcmp(constchar*str1,constchar*str2){assert(str1!NULLstr2!NULL);while(*str1*str2){if(*str1\0)return0;str1;str2;}return*str1-*str2;}intmain(){chars1[]abc;chars2[]abd;intretmy_strcmp(s1,s2);printf(%d,ret);return0;}strcat 使用与模拟实现char*strcat(char*destinatin,constchar*source)语法解读返回值、参数规则与strcpy大体一致返回值char*返回目标空间起始地址支持链式调用参数1char * destination目标字符串可写必须自带\0参数2const char * source源字符串只读保护功能从destination原有\0位置向后追加source内容不覆盖前面旧数据连带\0复制易错点遇到soruce的\0停止目标空间必须足够destination必须含有结束符\0| 模拟实现完整可运行代码#includestdio.h#includeassert.hchar*my_strcat(char*dest,constchar*src){assert(dest!NULLsrc!NULL);char*retdest;//走到dest末尾的\0while(*dest!\0){dest;}//追加连带复制\0while(*dest*src){;}returnret;}intmain(){charbuf[20]hello ;charadd[]world;my_strcat(buf,add);printf(%s\n,buf);return0;}内存操作函数依托内存字节实操场景阐释内存函数直接操作原始字节不受\0约束支持任意数据类型。memcpy 使用与模拟实现void*memcpy(void*destination,constvoid*source,size_tcount)语法解读返回值void*通用指针返回目标内存起始地址参数1void * destination目标地址通用指针参数 2const void *source源内存地址源数据只读参数 3size_t count拷贝字节数量功能从源拷贝 count 个字节到目标内存。易错点不受\0影响不处理内存重叠重叠场景结果未定义| 模拟实现完整可运行代码#includestdio.h#includeassert.hvoid*my_memcpy(void*dest,void*src,size_tnum){void*retdest;assert(destsrc);while(num--){*(char*)dest*(char*)src;dest(char*)dest1;src(char*)src1;}returnret;}intmain(){intarr1[]{1,2,3,4,5,6,7,8,9,10};intszsizeof(arr1)/sizeof(arr1[0]);my_memcpy(arr12,arr1,20);for(inti0;isz;i){printf(%d ,arr1[i]);}return0;}memmove 使用与模拟实现void*memmove(void*destination,constvoid*source,size_tcount)语法解读返回值void*通用指针返回目标内存起始地址参数 1void *destination目标地址通用指针参数 2const void *source源内存地址源数据只读参数 3size_t count拷贝字节数量功能拷贝 count 字节支持内存重叠。| 模拟实现完整可运行代码#includestdio.h#includeassert.hvoid*my_memmove(void*dest,void*src,size_tnum){void*retdest;assert(destsrc);if(destsrc){//从前向后拷贝while(num--){*(char*)dest*(char*)src;dest(char*)dest1;src(char*)src1;}}else{//从后向前拷贝dest(char*)destnum-1;src(char*)srcnum-1;while(num--){*(char*)dest*(char*)src;dest(char*)dest-1;src(char*)src-1;}}returnret;}intmain(){intarr1[]{1,2,3,4,5,6,7,8,9,10};intszsizeof(arr1)/sizeof(arr1[0]);my_memmove(arr12,arr1,20);for(inti0;isz;i){printf(%d ,arr1[i]);}return0;}内存重叠场景辨析内存重叠目标区间和源区间存在部分重合。dest src从前向后拷贝memcpy、memmove都正常。dest src发生重叠只能使用memmovememcpy会覆盖还未读取的数据结果错误
延伸阅读

更多相关文章

2026/10/9 4:31:07

Arduino MEGA驱动ILI9341与SD卡:SPI总线共享与BMP图片显示实战

1. 项目概述与核心价值 如果你已经跟着这个系列教程走过了前三部分,那么恭喜你,你的Arduino MEGA和ILI9341 TFT彩屏应该已经能够愉快地“对话”了。从点亮屏幕、绘制基本图形,到显示文本和图片,我们一步步搭建起了视觉交互的基础。…

2026/10/9 5:11:24

RoboLayout:可微分3D场景生成如何驱动具身智能任务规划

1. 项目概述:当机器人需要“想象”一个家 想象一下,你告诉一个家庭服务机器人:“去客厅的茶几上,把那个蓝色的杯子拿给我。” 这个指令对人类来说很简单,但对机器人而言,却是一个极其复杂的任务。它首先需要…

2026/10/9 18:08:29

Java实现IEC 60870-5-104规约解包:从字节流到遥测遥信解析

简介:本资源面向电力自动化、工控通信方向的Java开发者与学习者,围绕电网101规约(DL/T634.5101-2002)与104规约(DL/T634.5104-2009)提供一套可运行的解析与组包代码,解决规约报文内容解析、发送…

2026/10/9 18:08:29

C# + MySQL房屋租赁系统课设实战指南

简介:本资源是天津理工大学数据库课程设计的完整实践项目,面向计算机专业本科生及数据库初学者,聚焦房屋租赁业务场景,提供一套基于C#与MySQL开发的桌面端管理系统参考实现。项目涵盖需求分析、ER图与数据流图设计、数据库建表脚本…

2026/10/9 18:08:29

纯原生HTML登录界面源码集:三种布局与表单校验实战

简介:这是一套面向前端开发者与网页设计学习者的HTML登录界面源码合集,针对登录页设计耗时、风格单一、复用性差等痛点,提供可直接嵌入项目或二次开发的现成方案。压缩包共17个文件,以15个HTML页面为主体,每个文件对应…

2026/10/9 18:03:28

项目风险管理实战指南:从风险识别、评估到应对策略

做项目经理这几年,我吃过最大的亏,往往不是技术难题,而是那些“根本没想到会出事”的环节。印象最深的一次,某系统集成项目本来一切顺利,却在临上线前一周,因为供应商把关键设备交期推迟了一个月&#xff0…

2026/10/8 10:03:18

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/8 10:03:20

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/8 6:05:44

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

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

2026/10/9 0:04:27

毕业论文初稿完成后首次进行AIGC疑似度自查的摸底与分流策略

毕业论文初稿完成后首次进行AIGC疑似度自查的摸底与分流策略当数万字的学位论文初稿经历开题、实验、问卷与多轮文献梳理最终成形时,绝大多数研究生都会面临一道全新的形式审查关卡:AIGC 疑似度排查。在高校毕业审核流程中,盲审前的文本检测通…

2026/10/9 0:04:27

食堂节能改造源头工厂,商用厨房设备焕新方案广受好评

商用厨房作为餐饮经营、单位供餐的核心后勤阵地,其设备配置、动线规划与运维体系直接决定后厨作业效率、运营成本与合规性。从基础的灶具、制冷存储设备,到油烟净化、水处理等配套系统,每一个环节的合理性都与食品安全、能耗管控、消防安全挂…

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

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

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