C++中memcpy函数的使用以及模拟实现
前言
memcpy函数如何使用,以及如何实现我们自己的my_memcpy在这里给大家详细介绍。
一、什么是memcpy
memcpy是c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。
二、memcpy与strcpy的区别
1.复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
2.复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
3.用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy
1.strcpy
int main()
{
char arr1[] = "abcdef";
char arr2[20] = { 0 };
strcpy(arr2, arr1);
printf("%s", arr2);
return 0;
}
我们再看一下下面的代码
int main()
{
int arr1[] = { 1,2,3,4,5 };
int arr2[5] = { 0 };
printf("%s", arr2);
return 0;
}
这时我们发现arr2就不能正常的拷贝了,因为strcpy只能拷贝字符串,int类型的数组或者结构体都是不能拷贝的,因为strcpy比较依赖’0’通过检测‘0’来实现函数的,这时就需要我们的memcpy函数了。
2.memcpy
我们这里简单介绍一下函数的使用,函数的三个参数分别是dest(要复制的目的地),str(原目标),count(要复制内容的大小)。
struct S
{
char name[10];
int age;
};
int main()
{
struct S arr1[] = {{"ajd",20},{"qwe",18}};
struct S arr2[3] = { 0 };
memcpy(arr2, arr1, sizeof(arr1));
return 0;
}
这里我们通过memcpy函数成功复制了结构体arr1。
三、模拟实现memcpy
void* my_memcpy(void* dest, const void* src, size_t num)
{
assert(dest && src);
void* ret = dest;
while (num--)
{
*(char*)dest = *(char*)src;
++(char*)dest;
++(char*)src;
}
return ret;
}
struct S
{
char name[10];
int age;
};
int main()
{
struct S arr1[] = {{"ajd",20},{"qwe",18}};
struct S arr2[3] = { 0 };
my_memcpy(arr2, arr1, sizeof(arr1));
return 0;
}
这里我们模拟实现了memcpy函数。
总结
这些memcpy函数的全部内容了,主要就是讲解它的使用,以及我们自己如何去实现它,更多相关C++ memcpy函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
- .NET Core系列之MemoryCache 初识
- 007手机一键Root(安机网一键Root) v3.0 官方最新版 一键ROOT您的Android手机
- 12306密码被盗了怎么办?12306密码外泄解决方法
- 12个字的qq网名
- 150M迷你型无线路由器怎么设置?
- 192.168.1.1打不开怎么办?路由器192.168.1.1打不开的原因以及解决办法
- 2011年电子报合订本 电子报 编辑部 中文 PDF版 [84M]
- 2015年1月15日小米新旗舰发布会现场图文直播
- 2016.3.1vivo Xplay5新品发布会现场视频直播 优酷直播
- 2016华为P9发布会视频直播地址 4月15日华为P9国行发布会直播