C++中memcpy函数的使用以及模拟实现

 更新时间:2022年07月18日 17:00:16   作者:~小明学编程~  
memcpy是c和c++使用的内存拷贝函数,本文主要介绍了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;
}

这里我们可以看到字符串arr1已经被拷贝

我们再看一下下面的代码

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函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++实现扫雷小游戏(控制台)

    C++实现扫雷小游戏(控制台)

    这篇文章主要为大家详细介绍了C++实现扫雷小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • C语言实现简单飞机大战

    C语言实现简单飞机大战

    这篇文章主要为大家详细介绍了C语言实现简单飞机大战,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • C++实现对象化的矩阵相乘小程序

    C++实现对象化的矩阵相乘小程序

    这篇文章主要为大家详细介绍了C++实现对象化的矩阵相乘小程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • 一文带你掌握C++中的继承

    一文带你掌握C++中的继承

    继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,本文详解介绍了C++中的继承,感兴趣的同学可以借鉴一下
    2023-05-05
  • C语言详解实现链式二叉树的遍历与相关接口

    C语言详解实现链式二叉树的遍历与相关接口

    二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址
    2022-04-04
  • C++中的new/delete、构造/析构函数、dynamic_cast分析

    C++中的new/delete、构造/析构函数、dynamic_cast分析

    这篇文章主要介绍了C++中的new/delete、构造/析构函数、dynamic_cast分析 本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • 基于Qt实现简单的计算器

    基于Qt实现简单的计算器

    这篇文章主要介绍了如何使用Qt框架实现一个简单的计算器应用,我们将使用C++编程语言和Qt的图形用户界面库来开发这个应用,并展示如何实现基本的算术操作,希望对大家有所帮助
    2023-11-11
  • 详解C++ thread用法总结

    详解C++ thread用法总结

    这篇文章主要介绍了详解C++ thread用法总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Matlab实现绘制雷达图(蜘蛛图)

    Matlab实现绘制雷达图(蜘蛛图)

    这篇文章主要为大家详细介绍了如何利用Matlab实现雷达图(蜘蛛图)的绘制,文中的示例代码讲解详细,对我们学习Matlab有一定帮助,需要的可以参考一下
    2022-09-09
  • C++的静态成员变量和静态成员函数你了解多少

    C++的静态成员变量和静态成员函数你了解多少

    这篇文章主要为大家详细介绍了C++的静态成员变量和静态成员函数,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02

最新评论