函数memcpy的C语言实现

文章目录
  1. 函数介绍
    1. 原型
    2. 功能
    3. 参数
  2. 代码实现
  3. 测试
    1. 调用
    2. 运行结果
    3. 运行环境

指针是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