一. 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函数相关推荐

  1. C语言学习笔记---数据拷贝函数memcpy()和memmove()函数

      在C语言中拷贝字符串的时候通常可以使用strcpy()函数和strncpy()函数,这两个函数是专门针对字符串拷贝的.如果想要拷贝其他类型数组的话,可以使用memcpy()和memmove()函数 ...

  2. memcpy和memmove函数的区别

    文章目录 前言 memcpy函数 memmove函数 memcmp函数 前言 c语言<string.h>库里面有很多的字符函数,比如memcpy,memmove,memcmp等,这些函数是 ...

  3. C语言模拟实现memcpy函数

    void * memcpy ( void * destination, const void * source, size_t num ); 该函数是内存操作的拷贝函数,函数memcpy从source ...

  4. 详解memcpy和memmove函数的使用

    作者:~小明学编程 文章专栏:C语言基础知识 格言:目之所及皆为回忆,心之所想皆为过往 目录 memcpy 什么是memcpy? memcpy与strcpy的区别 memcpy 模拟实现memcpy ...

  5. 内存函数-----Memmove函数

    memmove函数 头文件:<string.h> 函数功能:将从源地址source开始的num个字节移动至目标地址destination处[可用于源地址与目标地址内存重叠的情况] 函数参数 ...

  6. C语言实用算法系列之memcpy、memmove函数原理与实现

    直接看代码 #include<stdio.h> #include<string.h> /*返回指向pDest的指针*/ void* MemCopy(void* pDest, c ...

  7. memcpy()和memmove()函数之间区别

    void* memcpy(void* dest,void* source,unsigned count); memcpy是把source 指向的对象中的n个字符拷贝到dest所指向的对象中,返回指向结 ...

  8. C语言 模拟实现 strlen strcat strcpy函数

    strlen函数 库函数strlen:strlen所作的是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0' ...

  9. memmove函数c语言实现,【C语言】实现memcopy、memmove函数

    memmove用于从src拷贝count个字符到dest,如果目标区域和源区域有重叠的话, memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中.但复制后src内容会被更改. 但是当 ...

最新文章

  1. [Spring MVC] - JSP + Freemarker视图解释器整合(转)
  2. 【Spark亚太研究院系列丛书】Spark实战高手之路-第3章Spark架构设计与编程模型第2节②...
  3. Gradle 2.0用户手册——总览(译)(转)
  4. VTK:Utilities之ObserveError
  5. PowerBIDeskTop报表元数据批量更新(可用于翻译场景)
  6. anjular.js表单验证实例
  7. jquery 高亮插件 highlight
  8. python xlwings 切片_Python xlwings库学习笔记(1)
  9. php开启慢查询,MySQL开启慢查询功能
  10. 力扣350.两个数组的交集 II(JavaScript)
  11. poj 3211 Washing Clothes (01)
  12. 数据库基础:什么是SQL
  13. 微软Windows2003的正版安装序列号
  14. redis 备份导出rdb_Redis学习——Redis持久化之RDB备份方式保存数据
  15. DEBUG:谷歌学术无法创建账号
  16. python牛顿迭代法求方程的根_python实现迭代法求方程组的根过程解析
  17. 笔记本网络带宽叠加(有线和WiFi同时使用) 2021-09-27
  18. 体脂手环、体脂秤等产品的体脂测量原理及技术方案分析
  19. 路由器经常出现断线现象解决对策在哪
  20. bxl文件转换为AD可以用的原理图和PCB库文件

热门文章

  1. 实战:在Java Web项目中使用HBase
  2. B端产品项目如何调研需求?
  3. 在Dell XPS 13安装WIN10和ubuntu双系统
  4. JAVA单元测试插件汇总
  5. OpenCV探索之路(二十六):如何去除票据上的印章(C++ )
  6. oracle 优化逻辑读过高(实战详解:逻辑读与arraysize关系)
  7. C# 8.0和.NET Core 3.0高级编程 分享笔记三:控制流程和转换类型
  8. 市面上最好的骨传导耳机是哪款、最好的骨传导耳机牌子推荐
  9. 转载光荣之路:与领导沟通那点事儿
  10. Blind Schnorr Signature