发布时间:2026/8/19 9:41:57
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/8/19 9:36:54

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

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

2026/8/19 9:36:54

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

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

2026/8/19 10:42:14

预编译策略树:解决GUI智能体实时性瓶颈的架构革新

1. 项目概述:当GUI智能体“答对但迟到”时,我们在谈论什么?如果你最近在关注多模态大模型和自动化领域,大概率会听到“GUI智能体”这个词。简单说,它就是一个能像人一样,通过看电脑屏幕(视觉输入…

2026/8/19 10:42:14

基于Lean定理证明器的智能体工作流形式化验证实践

1. 项目概述:当智能体遇上形式化验证 最近在搞智能体(Agent)相关的东西,发现一个挺有意思的痛点:我们费劲心思设计的工作流(Workflow),让智能体去执行任务、生成轨迹(Tra…

2026/8/19 10:42:14

基于K230开发板的嵌入式OCR与3D人脸活体检测系统实现

1. 项目概述:当K230遇见OCR与3D人脸网格 最近在捣鼓K230这块开发板,发现它真是个“宝藏男孩”。官方定位是面向边缘AI的高性能RISC-V芯片,双核设计加上内置的NPU,让它处理一些轻量级的视觉任务游刃有余。我琢磨着,现在…

2026/8/19 10:42:14

RT-Thread 2.0.1移植STM32F4xx实战:从内核移植到组件扩展

1. 项目缘起:为什么选择RT-Thread 2.0.1与STM32F4xx 最近在整理一个老项目的代码仓库,翻出来一块吃灰已久的STM32F407VET6核心板。这块板子当年性能算是不错,但项目后来转向了更复杂的Linux平台,它就闲置了。看着它,我…

2026/8/19 4:14:28

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/18 6:58:27

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/19 0:00:35

【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

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

2026/8/19 0:00:35

AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

1. 项目概述:当AI开始“猜”数学定理 最近在AI研究圈里,一个名为“Moonshine”的项目引起了不小的讨论。这名字本身就挺有意思,直译是“月光”,但在数学史上,它特指一个神秘而美丽的联系——魔群月光猜想,连…

2026/8/19 0:00:36

Agentic Web:构建智能体原生网络的基础设施挑战与四大支柱

1. 从“被动网络”到“能动网络”:一个正在发生的范式转移 如果你最近关注AI和Web技术的前沿动态,可能会频繁听到“Agentic Web”这个词。它不像“Web3”那样带着浓厚的金融色彩,也不像“元宇宙”那样充满科幻感,但它所描绘的未来…

2026/8/18 18:23:10

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/19 4:14:38

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/18 7:12:40

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…