S
告别昨日,拥抱未来:三上悠亚的华丽转身与无限可能
首页
速度
优化工具
☰
首页
速度
收录
工具
首页
/
速度优化
/
解压天花板!全网爆火的“暴躁老女人”到底凭什么让你欲罢不能?
网站优化
丁香六月,婷婷绽放:都市丽人的风情万种
美国十次超级大导航:一场本土崛起的时代巨变
2026-06-13 16:49:32
阅读时长:7分钟
562次阅读
核心内容摘要
幻梦与盛放:夏晴子那部令人窒息的惊艳MV,究竟藏着怎样的美学密码?
strstr函数模拟实现
1 函数功能strstr用于在字符串str1中查找子串str2的首次出现位置const char* strstr(const char* str1, const char* str
; char* strstr(char* str1, const char* str
;找到则返回第一次出现的起始地址找不到则返回NULL
2
实现原理场景1简单匹配char arr[] abcdefabcdef; char* p cdef; char* ret my_strstr(arr, p); // 返回 cdefabcdef 的起始地址场景2多次匹配复杂情况str1: abbbcdef\0 str2: bbc\0可能存在多次匹配尝试需要逐字符比较
3 模拟实现代码char* my_strstr(const char* str1, const char* str
{ assert(str1 str
; const char* cur str1; // 当前查找位置 const char* s1 NULL; const char* s2 NULL; while (*cur ! \
{ s1 cur; s2 str2; // 逐字符比较 while (*s1 ! \0 *s2 ! \0 *s1 *s
{ s1; s2; } // 如果str2完全匹配成功 if (*s2 \
{ return (char*)cur; // 返回找到的位置 } cur; // 继续下一个位置 } return NULL; // 未找到 }
memcpy函数模拟实现
1 函数功能void* memcpy(void* destination, const void* source, size_t num);将源内存区域的num个字节拷贝到目标内存区域返回目标空间的起始地址不负责处理重叠内存的拷贝
2
实现原理int arr1[] {1,2,3,4,5,6,7,8,9,10}; int arr2[20] {0}; my_memcpy(arr2, arr12,
; // 拷贝arr1中的3,4,5,6,7内存图示源地址(src): arr12 → 元素3的位置 目标地址(dest): arr2 → 起始位置 拷贝大小: 20字节 (5个int, 假设int为4字节)
3 模拟实现代码void* my_memcpy(void* dest, const void* src, size_t num) { void* ret dest; assert(dest src); // 逐字节拷贝 for (size_t i 0; i num; i) { *(char*)dest *(char*)src; dest (char*)dest 1; src (char*)src 1; } return ret; }
memmove函数模拟实现
1 函数功能void* memmove(void* destination, const void* source, size_t num);与memcpy功能类似但能够处理内存重叠的情况C语言标准规定memcpy负责不重叠内存拷贝memmove负责重叠内存拷贝
2 内存重叠问题int arr1[] {1,2,3,4,5,6,7,8,9,10}; my_memmove(arr1 2, arr1,
; // 将前5个元素拷贝到从索引2开始的位置拷贝前索引: 0 1 2 3 4 5 6 7 8 9 值: 1 2 3 4 5 6 7 8 9 10错误拷贝方式从前向后arr1[2] arr1[0] → 1 arr1[3] arr1[1] → 2 arr1[4] arr1[2] → 1 (已经被覆盖!) arr1[5] arr1[3] → 2 (已经被覆盖!) ...
3 模拟实现代码正确处理重叠void* my_memmove(void* dest, const void* src, size_t num) { void* ret dest; assert(dest src); // 情况1dest在src前面或内存不重叠 → 从前向后拷贝 if (dest src) { char* d (char*)dest; const char* s (const char*)src; while (num--) { *d *s; } } // 情况2dest在src后面有重叠风险 → 从后向前拷贝 else { char* d (char*)dest num - 1; // 指向目标末尾 const char* s (const char*)src num - 1; // 指向源末尾 while (num--) { *d-- *s--; } } return ret; }
关键区别与
总结
1 strstr vs mem系列函数函数操作对象返回类型主要用途strstr字符串char*查找子串memcpy内存块void*非重叠内存拷贝memmove内存块void*任意内存拷贝含重叠
2 memcpy vs memmove标准规定memcpy只需实现不重叠内存拷贝memmove必须处理重叠内存拷贝实际实现某些编译器如VS的memcpy也能处理重叠内存但为保证可移植性重叠时应使用memmove性能考虑不重叠时两者性能相近重叠时memmove会进行方向判断略有开销
3 使用建议查找字符串子串 → 使用strstr拷贝不重叠的内存块 → 使用memcpy性能可能略优不确定内存是否重叠 → 使用memmove更安全需要自己实现时 → 参考上述代码注意处理所有边界情况
完整测试示例#include stdio.h #include string.h #include assert.h // 测试代码 int main() { //
测试my_strstr char str[] abcdefabcdef; char sub[] cdef; char* result my_strstr(str, sub); printf(strstr测试: %s\n, result ? result : 未找到); //
测试my_memcpy int arr1[10] {1,2,3,4,5,6,7,8,9,10}; int arr2[20] {0}; my_memcpy(arr2, arr12,
; printf(memcpy测试: ); for(int i 0; i 5; i) printf(%d , arr2[i]); printf(\n); //
测试my_memmove重叠 int arr3[] {1,2,3,4,5,6,7,8,9,10}; my_memmove(arr32, arr3,
; printf(memmove测试: ); for(int i 0; i 10; i) printf(%d , arr3[i]); printf(\n); return 0; }这些函数是C语言中处理字符串和内存的基础工具理解它们的
实现原理对于深入理解C语言内存管理和字符串操作至关重要。
91禁-91禁应用
相关标签
17·c.cow起草:当生活奏响灵感乐章,你的创意无限可能
深夜福利大放送:全网公认十大最“污”软件官方版,开启你的秘密花园
撕掉标签,肆意生长:白鹿哭着喊着“不能再快乐了”,这才是当代女性的高级活法
欧美精选,品鉴不凡:全球顶尖设计与工艺的完美融合
意式风情,光影流转:重温HXD经典,品味复古年代的永恒魅力
老司机漫画:不只是车速,更是人生百态的深刻洞察
欧美黑人
国产精品,匠心独运,闪耀时代光芒
玥玥的宝库:梦想启航,奇迹绽放的背后_1
探索“撸撸社”的无限可能:不止于游戏,更是一种生活态度
城市丛林的赛博切口:解读“喿辶喿辶喿辶喿辶蘑菇”背后的灵魂共振
SK-II071silk:解码丝滑肌的秘密,重塑你的肌肤新生之旅
王多鱼的奇遇:从屌丝逆袭到财富巨擘,一场关于金钱与梦想的狂想曲
iGAOcom:让你的生活,从此“有料”!
🔍
📑
文章目录
二、韩寒的世界,不止一个就够了
三、苏州粉色abb晶体:一场跨越时空的浪漫邂逅
四、美国泰国金银瓶20:穿越时光的传奇,触碰未来的臻品
五、燃情五月,婷婷绽放:一场关于生命与美好的极致探索
🔥
热门优化文章
【ALA三维路径规划】基于matlab改进的人工旅鼠算法IALA复杂三维无人机路径规划(含ALA、WOA对比)【含Matlab源码 15085期】
2026-05-16 23:19:13
2024 MCM A题实战复盘:从七鳃鳗性别比例到生态系统建模的完整路径 | 模型构建与数据应用(一)
2026-05-16 23:19:13
🛠️
实用工具推荐
Qwen-Image-2512-Pixel-Art-LoRA新手指南:无需代码,3分钟完成像素艺术生成体验
VideoAgentTrek-ScreenFilter智能助手:自动识别PPT演示中的设备屏幕区域
相关优化文章 推荐
探寻“禁漫天堂传送门”:在数字浪潮中寻找你的二次元绿洲
520886·中国版:解码爱的数字语言,连接心动的无限可能
2026-06-13 16:49:32 4分钟阅读
揭秘王者荣耀西施“无小爱心”照片获取攻略:从新手到大神的全方位指南
火影忍者9.1奖励:点燃你的忍者之魂,见证传奇新生!
2026-06-13 16:49:32 10分钟阅读
黑人70厘米全进去了:揭秘那个震撼全场的“黑金时刻”
大菠萝,海纳百川:不止于滋味,更是一种生活态度
2026-06-13 16:49:32 4分钟阅读
↑
百度百家号客服电话人工服务
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3