手写实现 memcpy
📅 2026/7/3 15:57:46
👁️ 阅读次数
📝 编程学习
手写实现 memcpy(不处理内存重叠,标准原生 memcpy 特性)
原理说明
void*无类型指针,不能直接解引用、自增,先转unsigned char*按字节拷贝;size_t无符号整数,代表要拷贝的字节总数;- 标准
memcpy不区分源、目标内存是否重叠,重叠场景行为未定义; - 返回目标起始地址。
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; }
编程学习
技术分享
实战经验