手写实现 memcpy
手写实现 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; }