C语言基础分享:别再只会 strcpy 了!C语言这4个“内存搬运工”
今天我们来聊聊 C 语言里那几个平时不太起眼但一用起来就能让你代码起飞或者翻车的家伙——内存函数。很多人学 C 语言字符串函数strcpy,strcat背得滚瓜烂熟但一碰到memcpy和memmove就开始犯迷糊“这不都是复制粘贴吗为啥要搞两个”兄弟这就好比你以为剪刀和菜刀都是切东西的切菜用哪个都行但你总不能用剪刀去剁排骨吧今天咱们就来扒一扒string.h里这四个“扫地僧”memcpy、memmove、memset、memcmp。看完这篇你就知道为啥有些 Bug 只有在半夜才会出现以及为啥大佬们写代码都喜欢直接怼内存。一、memcpy风风火火的“冒失鬼”搬运工它是干啥的memcpy的工作很简单不管三七二十一从源地址开始抄起num个字节原封不动地扔到目标地址。它有个最大的特点眼瞎。它不关心你内存里放的是整数、浮点数还是结构体甚至不关心里面有没有数据它的任务就是把那一堆 0101 搬过去。eg你有这么一串数字{1,2,3,4,5,...}你想把它复制到另一个空数组里复制 20 个字节也就是 5 个 int结果arr2里变成了{1,2,3,4,5,...}。没毛病致命弱点内存重叠这是memcpy最大的坑。假如你想把数组前 5 个数覆盖到第 3 个位置开始的地方预期{1,2,1,2,3,4,5,8,9,10}你写了注意了​ 虽然有时候你运行发现结果居然是对的但这叫“未定义行为”Undefined Behavior。这就好比你让一个人同时踩在两个凳子上他可能站得住也可能下一秒就摔死。编译器心情不好换了优化等级、换了平台的时候结果就可能炸了。口诀只要内存不重叠memcpy 是首选一旦重叠立马换人。二、memmove稳如老狗的“老司机”搬运工既然memcpy搞不定重叠那就轮到memmove出场了。它是干啥的memmove是memcpy的 Pro 版或者说防撞版。它专门处理内存重叠的情况。老司机是怎么开车的面对重叠memmove会先判断一下如果源地址在目标地址后面那就从头往后拷跟 memcpy 一样。如果源地址在目标地址前面就是上面那个坑爹情况老司机就会从后往前拷。为什么从后往前因为这样不会覆盖掉还没来得及拷贝的数据。还是刚才那个例子结果稳稳地输出1 2 1 2 3 4 5 8 9 10。人话总结memcpy是个愣头青memmove是个心细的老管家。平时能用memcpy就用因为它稍微快那么一丢丢但只要涉及自己拷贝自己或者地址有交叉闭眼选memmove。三、memset强迫症晚期的“粉刷匠”它是干啥的memset负责把一块内存区域的每一个字节都刷成同一个值。最容易踩的坑它是按“字节”刷的这一点太重要了memset不管你是int数组还是char数组它眼里只有“字节”。正确用法字符这里x正好是一个字节完美。经典翻车现场整数如果你想把一个int数组初始化为 1你以为数组里全是1实际上因为int占 4 个字节你刷完之后每个int变成了0x01010101也就是十进制的 16843009。避坑指南想清零memset(arr, 0, sizeof(arr));因为只有 0 不管怎么填都是 0。想初始化字符随便用。想初始化非 0 的整数老老实实写循环或者用calloc。四、memcmp拿着放大镜的“较真裁判”它是干啥的比较两个内存块的内容看看谁大谁小或者是不是一样。和 strcmp 有啥区别strcmp遇到\0就停了它是字符串专用。memcmp不管你有没有\0我只管比较你给我的num个字节。代码演示在这个例子里g103比G71大所以buffer1更大。应用场景非常适合比较结构体、二进制数据块或者像这里一样精确控制比较多少个字节不受字符串结束符影响。五、总结时间到啦事已至此先吃饭吧也整理整理这些小小知识点把这四个兄弟分清楚函数外号核心技能注意事项memcpy​冒失鬼快速拷贝内存严禁内存重叠否则结果看脸memmove​老司机安全拷贝内存允许内存重叠慢一点点但稳memset​粉刷匠批量填充字节除了 0别用它初始化int数组memcmp​裁判比较内存内容按字节比不怕\0可指定长度最后送大家一句忠告C 语言直接操作内存虽然爽但一定要清楚自己在干什么。毕竟指针满天飞的感觉虽然像黑客但 Segmentation fault段错误的感觉就像被扇了一耳光。

相关新闻

6大进程调度算法性能对比:FCFS/SJF/RR/HRRN/优先级/多级反馈队列

6大进程调度算法性能对比:FCFS/SJF/RR/HRRN/优先级/多级反馈队列

6大进程调度算法性能对比:FCFS/SJF/RR/HRRN/优先级/多级反馈队列在操作系统的核心机制中,进程调度算法如同交通信号灯,决定着计算资源的分配秩序。当多个进程争夺有限的CPU资源时,不同的调度策略会产生截然不同的系统表现。本文将…

2026/7/13 2:50:19阅读更多 →
define和typedef区分

define和typedef区分

1. 处理时机(Preprocessing vs Compilation)#define(宏):属于预处理阶段。预处理器是一个独立的文本替换工具,它根本不懂 C 语言的语法。它只是机械地把代码里的宏名字替换成指定的文本,替换完就…

2026/7/13 2:50:19阅读更多 →
竞品分析3.0:从功能对比到生态洞察的5个维度升级

竞品分析3.0:从功能对比到生态洞察的5个维度升级

竞品分析3.0:从功能对比到生态洞察的5个维度升级在红海市场中,传统竞品分析正面临失效风险。当80%的产品经理还在对比功能清单时,头部企业早已将分析视角转向技术栈深度、用户情感图谱和生态位博弈。这不是简单的工具升级,而是一场…

2026/7/13 2:50:19阅读更多 →
Mythos模型:自动化渗透测试的技术跃迁与企业落地指南

Mythos模型:自动化渗透测试的技术跃迁与企业落地指南

1. 这不是一次普通模型发布:Mythos背后的真实技术断层与行业震感你可能已经刷到过几条标题里带着“Claude Mythos”“Project Glasswing”“零日漏洞”字样的快讯,但如果你只把它当成又一个“更强的Claude”,那你就错过了过去五年AI安全领域最…

2026/7/13 4:10:29阅读更多 →
(1/26)GO练习题-Goroutinue泄漏

(1/26)GO练习题-Goroutinue泄漏

某电商公司的订单服务,上线后运行了大约 2 小时,OOM(Out of Memory)被 K8s 杀死,进程反复重启。 运维同事看到的日志只有一行:fatal error: runtime: out of memory。 开发同事重启了几次,问题依…

2026/7/13 4:10:29阅读更多 →
XAI不是加解释模块,而是重构AI交付全流程

XAI不是加解释模块,而是重构AI交付全流程

1. 这不是给算法看的说明书,而是给业务方、监管者和用户写的“信任契约”ExplainableAI(XAI)这个词,这两年在技术会议、合规文档和产品评审会上出现的频率,已经高到让一线工程师听到就想默默关掉会议通知。但绝大多数人…

2026/7/13 4:10:29阅读更多 →
4G、WiFi 6、蓝牙 5.3 物联网选型指南:5 大关键指标与 3 个典型场景

4G、WiFi 6、蓝牙 5.3 物联网选型指南:5 大关键指标与 3 个典型场景

4G、WiFi 6、蓝牙5.3物联网选型实战:5维参数与3大场景深度解析当智能家居的温控器每隔30秒上传一次环境数据,当工业传感器在电磁干扰严重的车间传输振动信号,当运动手环需要同时处理心率监测和音乐播放——这些场景背后,是开发者对…

2026/7/13 4:10:29阅读更多 →
torchvision数据集及DataLoader的使用

torchvision数据集及DataLoader的使用

本文主要介绍torchvision内置数据集及DataLoader使用 文章目录一、CIFAR10 数据集初识(举例)1.一句话理解2.CIFAR10 数据档案3.数据集下载二、查看数据集内容1.基本操作2.数据结构三、与 transforms 联动四、DataLoader — 从"一副牌"到"…

2026/7/13 4:10:29阅读更多 →
AI 芯片全景对比:NVIDIA / AMD / 华为,谁在为你的模型“发电“?

AI 芯片全景对比:NVIDIA / AMD / 华为,谁在为你的模型“发电“?

副标题: 计算单元 显存带宽 芯片互联 软件生态——四个维度拆解 2026 年的 AI 芯片战场,附国产芯片(昇腾 910C/950、寒武纪、壁仞等)生存状态报告 一、引子 🎯 AI 芯片领域的竞争格局在 2026 年已经变得前所未有的…

2026/7/13 4:05:28阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/12 0:02:11阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/13 0:50:34阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/12 0:02:11阅读更多 →
卡梅德生物技术快报|蛋白质分离纯化:肠激酶可溶性原核表达 + 两步层析全参数|标准化蛋白质分离纯化 SOP

卡梅德生物技术快报|蛋白质分离纯化:肠激酶可溶性原核表达 + 两步层析全参数|标准化蛋白质分离纯化 SOP

研究痛点提出(提出问题)重组肠激酶是融合标签切除核心工具酶,当前原核表达体系存在三大标准化难题,直接阻碍可复现的蛋白质分离纯化流程搭建:Trx、GST、单 SUMO 标签融合产物绝大多数为包涵体,沉淀占比超 9…

2026/7/13 0:04:58阅读更多 →
语音转文字工具AsrTools:让音频整理变得简单高效

语音转文字工具AsrTools:让音频整理变得简单高效

语音转文字工具AsrTools:让音频整理变得简单高效 【免费下载链接】AsrTools ✨ AsrTools: Smart Voice-to-Text Tool | Efficient Batch Processing | User-Friendly Interface | No GPU Required | Supports SRT/TXT Output | Turn your audio into accurate text …

2026/7/13 0:04:58阅读更多 →
Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改 【免费下载链接】palworld-save-tools Tools for converting Palworld .sav files to JSON and back 项目地址: https://gitcode.com/gh_mirrors/pa/palworld-save-tools 你是否曾经想要调整Palwor…

2026/7/13 0:04:58阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/11 16:20:28阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/13 4:08:53阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/12 21:43:43阅读更多 →