指针是C语言中非常重要的一个部分,实现memcpy也是理解C语言指针的一种体现。听说现在很多公司技术面会考到C语言经典函数的实现,所以早作准备,博客上更一更各种简单的实现。
函数介绍
原型
1
| void *memcpy(void *dest, const void *src, size_t n);
|
功能
将一个连续的内存区域(n个字节的数据)拷贝到另一块内存区域,拷贝时会覆盖原有数据。若两个内存区域有重叠部分,会按照存储顺序覆盖内存。
参数
- void *dest 指定一个内存区域的首地址,作为目标内存区域的首地址
- const void *src 指定源数据内存区域的首地址
- size_t n C语言头文件stddef.h中包含的数据类型,为无符号整型,unsigned int
代码实现
1 2 3 4 5 6 7 8 9 10 11
| void *memcpy(void *dest, const void *src, size_t n) { if (dest == NULL || src == NULL) { return NULL; } const char *src_temp = (char *)src; char *dest_temp = (char *)dest; for (int i = 0; i < (int)n; ++i) { dest_temp[i] = src_temp[i]; } dest = (void *)dest_temp; }
|
测试
调用
1 2 3 4 5 6 7
| int main() { char dest_testStr[9] = "12345678"; char src_testStr[9] = "abcdefgh"; memcpy(dest_testStr, src_testStr, 4); printf("%s", dest_testStr); return 0; }
|
运行结果
abcd5678
运行环境
Mac OS X 10.10.5
CLion 1.0
CMake 3.1.3