用C语言模拟实现memcpy函数,memmove函数
一. memcpy函数
void * memcpy ( void * destination, const void * source, size_t num );
复制内存块
将num字节的值从源指向的位置直接复制到目标指向的内存块。
源指针和目标指针所指向的对象的底层类型与此函数无关;结果是数据的二进制副本。
该函数不检查源文件中的任何终止空字符——它总是准确地复制num字节。
为了避免溢出,目标和源参数所指向的数组的大小应该至少为num字节,并且不应该重叠(对于重叠的内存块,memmove是一种更安全的方法)。
参数
1. destination
指向要复制内容的目标数组的指针,类型转换为void*类型的指针。
2. source
指向要复制的数据源的指针,类型转换为const void*类型的指针。
3. num
要复制的字节数。Size_t是无符号整型。
代码实现:
#include <stdio.h>
#include <string.h>struct
{char name[40];int age;
} person, person_copy;int main ()
{char myname[] = "Prica Kordires";/* 使用memcpy复制字符串 */memcpy ( person.name, myname, strlen(myname)+1 );person.age = 40;/* 使用memcpy复制结构体 */memcpy ( &person_copy, &person, sizeof(person) );printf ("person_copy: %s, %d \n", person_copy.name, person_copy.age );return 0;
}
二. memmove函数
void * memcpy ( void * destination, const void * source, size_t num );
移动内存块
将num字节的值从源指向的位置复制到目标指向的内存块。复制发生时,就像使用了中间缓冲区一样,允许目标和源重叠。
源指针和目标指针所指向的对象的底层类型与此函数无关;结果是数据的二进制副本。
该函数不检查源文件中的任何终止空字符——它总是准确地复制num字节。
为了避免溢出,目标参数和源参数所指向的数组的大小应该至少为num字节。
参数
1. destination
指向要复制内容的目标数组的指针,类型转换为void*类型的指针。
2. source
指向要复制的数据源的指针,类型转换为const void*类型的指针。
3. num
要复制的字节数。Size_t是无符号整型。
代码实现:
#include<stdio.h>
#include<assert.h>void my_memmove(void* dest, const void* src, size_t num)
{char* str1 = (char*)dest;const char* str2 = (const char*)src;assert(dest && src);if (str1 > str2 && str1 < str2 + num){while (num--){*(str1 + num) = *(str2 + num);}}else{while (num--){*str1 = *str2;str1++;str2++;}}
}
int main()
{char str[] = "memmove can be very useful......";my_memmove(str + 20, str + 15, 11);puts(str);return 0;
}
用C语言模拟实现memcpy函数,memmove函数相关推荐
- C语言学习笔记---数据拷贝函数memcpy()和memmove()函数
在C语言中拷贝字符串的时候通常可以使用strcpy()函数和strncpy()函数,这两个函数是专门针对字符串拷贝的.如果想要拷贝其他类型数组的话,可以使用memcpy()和memmove()函数 ...
- memcpy和memmove函数的区别
文章目录 前言 memcpy函数 memmove函数 memcmp函数 前言 c语言<string.h>库里面有很多的字符函数,比如memcpy,memmove,memcmp等,这些函数是 ...
- C语言模拟实现memcpy函数
void * memcpy ( void * destination, const void * source, size_t num ); 该函数是内存操作的拷贝函数,函数memcpy从source ...
- 详解memcpy和memmove函数的使用
作者:~小明学编程 文章专栏:C语言基础知识 格言:目之所及皆为回忆,心之所想皆为过往 目录 memcpy 什么是memcpy? memcpy与strcpy的区别 memcpy 模拟实现memcpy ...
- 内存函数-----Memmove函数
memmove函数 头文件:<string.h> 函数功能:将从源地址source开始的num个字节移动至目标地址destination处[可用于源地址与目标地址内存重叠的情况] 函数参数 ...
- C语言实用算法系列之memcpy、memmove函数原理与实现
直接看代码 #include<stdio.h> #include<string.h> /*返回指向pDest的指针*/ void* MemCopy(void* pDest, c ...
- memcpy()和memmove()函数之间区别
void* memcpy(void* dest,void* source,unsigned count); memcpy是把source 指向的对象中的n个字符拷贝到dest所指向的对象中,返回指向结 ...
- C语言 模拟实现 strlen strcat strcpy函数
strlen函数 库函数strlen:strlen所作的是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0' ...
- memmove函数c语言实现,【C语言】实现memcopy、memmove函数
memmove用于从src拷贝count个字符到dest,如果目标区域和源区域有重叠的话, memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中.但复制后src内容会被更改. 但是当 ...
最新文章
- [Spring MVC] - JSP + Freemarker视图解释器整合(转)
- 【Spark亚太研究院系列丛书】Spark实战高手之路-第3章Spark架构设计与编程模型第2节②...
- Gradle 2.0用户手册——总览(译)(转)
- VTK:Utilities之ObserveError
- PowerBIDeskTop报表元数据批量更新(可用于翻译场景)
- anjular.js表单验证实例
- jquery 高亮插件 highlight
- python xlwings 切片_Python xlwings库学习笔记(1)
- php开启慢查询,MySQL开启慢查询功能
- 力扣350.两个数组的交集 II(JavaScript)
- poj 3211 Washing Clothes (01)
- 数据库基础:什么是SQL
- 微软Windows2003的正版安装序列号
- redis 备份导出rdb_Redis学习——Redis持久化之RDB备份方式保存数据
- DEBUG:谷歌学术无法创建账号
- python牛顿迭代法求方程的根_python实现迭代法求方程组的根过程解析
- 笔记本网络带宽叠加(有线和WiFi同时使用) 2021-09-27
- 体脂手环、体脂秤等产品的体脂测量原理及技术方案分析
- 路由器经常出现断线现象解决对策在哪
- bxl文件转换为AD可以用的原理图和PCB库文件
热门文章
- 实战:在Java Web项目中使用HBase
- B端产品项目如何调研需求?
- 在Dell XPS 13安装WIN10和ubuntu双系统
- JAVA单元测试插件汇总
- OpenCV探索之路(二十六):如何去除票据上的印章(C++ )
- oracle 优化逻辑读过高(实战详解:逻辑读与arraysize关系)
- C# 8.0和.NET Core 3.0高级编程 分享笔记三:控制流程和转换类型
- 市面上最好的骨传导耳机是哪款、最好的骨传导耳机牌子推荐
- 转载光荣之路:与领导沟通那点事儿
- Blind Schnorr Signature