当前位置: 首页 > article >正文

【c语言】memcpy函数的使用和模拟实现

1.memcpy函数的使用

memcpy 函数是 C 标准库中的一个内存复制函数,定义在 <string.h> 头文件中。它用于将指定大小的内存块从一个地址复制到另一个地址。

void * memcpy ( void * destination, const void * source, size_t num );
  • destination:目标内存地址,即要复制到的位置。
  • source:源内存地址,即要从中复制的位置。
  • num:要复制的字节数。
  • 返回指向目标内存地址 destination 的指针。

注意:

这个函数在遇到 '\0' 的时候并不会停下来。

如果source和destination有任何的重叠,复制的结果都是未定义的。

实例:

#include <stdio.h>
#include <string.h>
struct {
char name[40];
int age;
} person, person_copy;
int main ()
{
char myname[] = "Pierre de Fermat";
memcpy ( person.name, myname, strlen(myname)+1 );
person.age = 46;
memcpy ( &person_copy, &person, sizeof(person) );
printf ("person_copy: %s, %d \n", person_copy.name, person_copy.age );
return 0;
}

运行结果:

 

 2.memcpy函数的模拟实现

#include <stdio.h>
#include <string.h>
void* my_memcpy(void* dst, const void* src, size_t count)
{
	void* ret = dst;
	assert(dst);
	assert(src);
	/*
	* copy from lower addresses to higher addresses
	*/
	while (count--) {
		*(char*)dst = *(char*)src;
		dst = (char*)dst + 1;
		src = (char*)src + 1;
	}
	return(ret);
}
struct {
	char name[40];
	int age;
} person, person_copy;
int main()
{
	char myname[] = "Pierre de Fermat";
	/* using memcpy to copy string: */
	my_memcpy(person.name, myname, strlen(myname) + 1);
	person.age = 46;
	/* using memcpy to copy structure: */
	my_memcpy(&person_copy, &person, sizeof(person));
	printf("person_copy: %s, %d \n", person_copy.name, person_copy.age);
	return 0;
}


http://www.kler.cn/a/386026.html

相关文章:

  • reduce-scatter:适合分布式计算;Reduce、LayerNorm和Broadcast算子的执行顺序对计算结果的影响,以及它们对资源消耗的影响
  • 坚果云·无法连接服务器(无法同步)
  • Python学习从0到1 day29 Python 高阶技巧 ⑦ 正则表达式
  • Oracle19C AWR报告分析之Instance Efficiency Percentages (Target 100%)
  • 【Pikachu】任意文件上传实战
  • Python调用API翻译Excel中的英语句子并回填数据
  • Linux-2
  • 2024年软件设计师中级(软考中级)详细笔记【12】软件系统分析与设计
  • 枚举及优化(二)
  • 「Mac玩转仓颉内测版2」入门篇2 - 编写第一个Cangjie程序
  • python实战(八)——情感识别(多分类)
  • Tomcat(3) Tomcat是哪种类型的服务器?
  • c语言学习8位运算
  • 代码随想录第十六天| 513.找树左下角的值 、112. 路径总和 、113. 路径总和 II、106、从中序与后序遍历序列构造二叉树
  • Rust性能优化与调试第二节:调试与错误处理的实用工具
  • 软件测试(系统测试)的定位和专业:完善产品;专业;非助手;自动化
  • FPGA图像处理.从认识噪声到去噪算法
  • 【服务器】使用命令行文本编辑器(如 vim、nano 或 vi)创建文件并编辑
  • JAVA设计模式之【建造者模式】
  • Java基于小程序公考学习平台的设计与实现(附源码,文档)
  • 大数据学习09之Hive基础
  • Beyond Compare 5 比较文本文件时,如何忽略字母的大小写差异?
  • docker入门(一)
  • unity显示获取 年月日周几【日期】
  • 关于Django 模型字段 `choices`自定义数据类型的枚举——补充
  • Java SPI——针对实习面试