当前位置: 首页 > news >正文

手写实现 memcpy

手写实现 memcpy(不处理内存重叠,标准原生 memcpy 特性)

原理说明

  1. void*无类型指针,不能直接解引用、自增,先转unsigned char*按字节拷贝;
  2. size_t无符号整数,代表要拷贝的字节总数;
  3. 标准memcpy不区分源、目标内存是否重叠,重叠场景行为未定义;
  4. 返回目标起始地址。

C 完整实现

#include <stdio.h> #include <stddef.h> // size_t void* memcpy(void *MemDest, const void *MemSrc, size_t size) { // 空指针校验 if (MemDest == NULL || MemSrc == NULL) { return NULL; } // 转为字节指针,逐字节复制 unsigned char *dest = (unsigned char *)MemDest; const unsigned char *src = (const unsigned char *)MemSrc; for (size_t i = 0; i < size; i++) { dest[i] = src[i]; } return MemDest; } // 测试代码 int main(void) { char str1[32] = {0}; char str2[] = "Hello C memcpy test"; // 拷贝字符串 memcpy(str1, str2, sizeof(str2)); printf("%s\n", str1); // 拷贝数字数组 int arrDst[5] = {0}; int arrSrc[5] = {1,2,3,4,5}; memcpy(arrDst, arrSrc, sizeof(arrSrc)); for (int i = 0; i < 5; i++) { printf("%d ", arrDst[i]); } return 0; }

极简指针版(更贴近底层原生写法)

void* memcpy(void *MemDest, const void *MemSrc, size_t size) { if (!MemDest || !MemSrc) return NULL; unsigned char *dest = (unsigned char *)MemDest; const unsigned char *src = (const unsigned char *)MemSrc; while (size--) { *dest++ = *src++; } return MemDest; }
http://www.jsqmd.com/news/1116273/

相关文章:

  • 谁才是真正的一站式聚合?2026年AI聚合平台API中转站实测横评
  • 冷挤压技术深度解析:从工艺原理到产业化实践——以浙江三维大通精锻为例
  • YOLO目标检测从入门到实战:2小时掌握环境搭建、模型训练与部署
  • nestos-installer源码解析:Rust编写的操作系统安装工具终极指南
  • openEuler/llm_solution加速层技术解析:sysHAX、expert-kit、LMCache如何实现3倍性能提升
  • 精密转子上下料自动化升级:3D视觉实现 ±1mm 定位与 99.9% 连续识别稳定性
  • LV3296与TM4C1294NCZAD嵌入式数据采集系统开发指南
  • 游戏开发资源优化:Free Texture Packer深度解析与实战指南
  • 工业级传感器控制系统核心组件选型与设计实践
  • LinQuickRec未来路线图:即将发布的5大功能与技术升级
  • Codex:AI编程的工程化交付引擎,从生成到部署的自动化桥梁
  • 无小区大规模MIMO中的LoS相位跟踪与信道估计优化
  • witty可视化界面完全指南:Web管理平台让AI经验库管理变得简单直观
  • Claude Code CLI工具深度配置指南:终端AI工作流重构实战
  • Python爬虫经典案例第54篇:在线教育平台爬取——Coursera课程数据采集实战
  • LV3296与STM32F415ZG信号处理系统设计与优化
  • 告别零散工具:一个macOS开发者工具箱如何重构你的工作流
  • 基于STM32与TPAFE0808的多通道信号采集系统设计
  • M24256E与PIC32MX675F256L的工业级嵌入式存储方案
  • 洛雪音乐音源终极配置指南:3步解决播放失败问题
  • openeuler/cdf-crypto安全随机数生成机制:保护你的密钥不被破解
  • 【爱马仕智能体】Hermes 本地智能体 Windows 部署文档 整合包分步安装教学(含安装包)
  • 如何快速部署 Compass-CI 集群?完整指南助你30分钟上手
  • 如何将dpu-utilities集成到现有基础设施:企业级部署的最佳实践
  • Compass-CI 用户指南:从注册到提交测试任务的终极教程
  • DDE异常日志收集器使用教程:快速定位和解决桌面问题
  • 告别源码环境调试,Hermes Agent Windows 极简部署实操全流程
  • Kiran-panel:开源桌面面板系统终极指南 - 打造个性化Linux桌面体验
  • 如何用AI技术让老照片重现青春:RestorePhotos.io深度解析
  • 5分钟掌握TegraRcmGUI:Windows平台最直观的Switch注入工具