系列文章目录

内存操作函数memcpy,memmove,memcmp


文章目录

  • 系列文章目录
  • 一、memcpy函数
  • 二、memmove函数
  • 三、memcmp函数
  • 总结

一、memcpy函数

void * memcpy ( void * destination, const void * source, size_t num );

函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。

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

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

#include<stdio.h>
#include<string.h>
int main()
{char arr1[] = "abcdef";char arr2[] = "qwe";//memcpy((char*)arr1, (char*)arr2, 3);printf("%s\n",arr1);return 0;
}

这就是简单的memcpy函数的作用,其实memcpy函数和strncpy函数的实现是基本相同的,

都是进行拷贝

对于memcpy函数的简单模拟实现其实就是运用双指针的方法,依次将目标数组依次拷贝到相对应的位置

需要注意的是在模拟实现中需要注意最后如果直接返回数组的话是不行的,而要在开头设置一个ret记录dest的初始地址位置,最后返回初始地址位置

#include<stdio.h>
#include<assert.h>
void* my_memcpy(void* dest, const void* src, size_t count)
{assert(dest && src);void* ret = dest;while (count--){*(char*)dest = *(char*)src;dest = (char*)dest + 1;src = (char*)src + 1;}return ret;
}
int main()
{int arr1[10] = { 0 };int arr2[10] = { 1,2,3,4,5,6,7,8,9,0 };my_memcpy(arr2, arr2+4, 20);int i = 0;int sz = sizeof(arr1) / sizeof(arr1[0]);for (i = 0; i < sz; i++){printf("%d ", arr2[i]);}return 0;
}

二、memmove函数

1.memmove函数的基本实现

void * memmove ( void* destination, const void * source, size_t num );

和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。

如果源空间和目标空间出现重叠,就得使用memmove函数处理。

#include<stdio.h>
#include<string.h>
#include<assert.h>
int main()
{int arr1[10] = { 0 };int arr2[] = { 1,2,3,4,5,6,7,8,9,0 };int i = 0;int sz = sizeof(arr2) / sizeof(arr2[0]);memmove(arr2+2, arr2, 40);for (i = 0; i < sz; i++){printf("%d ",arr2[i]);}return 0;
}

2.memmove函数的模拟实现

void* my_memmove(void* dest, const void* src, size_t count)
{assert(dest && src);void* ret = dest;if (dest < src){//从前到后while (count--){*(char*)dest = *(char*)src;dest = (char*)dest + 1;src = (char*)src + 1;}}else{//从后向前while (count--){*((char*)dest + count) = *((char*)src + count);}}return ret;
}
int main()
{//int arr1[20] = { 0 };int arr2[15] = { 1,2,3,4,5,6,7,8,9,0 };my_memmove(arr2 + 10, arr2, 20);int i = 0;int sz = sizeof(arr2) / sizeof(arr2[0]);for (i = 0; i < sz; i++){printf("%d ", arr2[i]);}return 0;
}

三、memcmp函数

int memcmp ( const void * ptr1, const void * ptr2, size_t num );

memcmp函数比较的是两个数组中相应位置的ASCII值

#include<stdio.h>
#include<string.h>
#include<assert.h>
int main()
{int arr1[] = { 1,2,3,4,5 };int arr2[] = { 1,2,3,4,0x11223305 };int ret = memcmp(arr1, arr2, 17);printf("%d\n",ret);return 0;
}

总结

本章简单的介绍了下memcpy,memmove,memcmp 这三个常用的库函数,希望对大家有点作用

memcpy和memmove以及memcmp相关推荐

  1. memcpy、memmove、memcmp、memset函数的使用说明和模拟实现

    在前面的文章中,我已经对字符串函数进行了详细的介绍和模拟实现,今天,我来讲解另一类函数----------内存函数. 这里写目录标题 memcpy函数 memmove函数 memcmp函数 memse ...

  2. memcpy,memmove,memcmp,memset内存函数

    目录 memcpy内存拷贝函数 memmove函数 memcmp函数介绍 memset内存设置函数 memcpy内存拷贝函数 memcpy是内存拷贝函数,从源字符串src所指向的起始位置,拷贝到目标字 ...

  3. 赶紧来修炼内功发~内存函数详解大全-memcpy、memmove、memcmp

    目录 1. memcpy EX: PS: 模拟实现: 2. memmove EX: ​编辑 模拟实现: 3. memcmp EX: PS: 模拟实现: 4. memset EX: 模拟实现: 1. m ...

  4. 内存函数:memcpy、memmove、memcmp、memset(超详细讲解,小白一看就懂!!!!)

    目录 一.前言 二.内存操作函数

  5. memcpy和memmove函数的区别

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

  6. memcpy、memmove、memset、memchr、memcmp、strstr详解

    第一部分 综述 memcpy.memmove.memset.memchr.memcmp都是C语言中的库函数,在头文件string.h中.memcpy和memmove的作用是拷贝一定长度的内存的内容,m ...

  7. 【C语言】memcmp、memcpy、memmove、memset、memchr函数详解

    目录 一.综述 二.介绍 1.memcmp 2.memcpy 3.memmove 4.memset 5.memchr 一.综述 memcmp.memcpy.memmove.memset.memchr都 ...

  8. C语言 -- string.h中函数功能详解与手动实现 - 02(常用函数memcpy、memmove、strcpy、strdup、strcat、strtok...)

    内容预览 3.5.搬迁类型 --- 函数功能详细说明 :将内存空间中内容移动.复制到另一内存空间 3.6.搬迁类型 --- 函数功能测试与手动实现 3.6.1.memcpy.memccpy 3.6.2 ...

  9. strcpy,memcpy和memmove区别

    strcpy和memcpy都是标准C库函数,它们有下面的特点. strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符. 已知strcpy ...

  10. 细谈C语言中的strcpy,strncpy,memcpy,memmove,memset函数

    一.函数介绍: 1.memcpy 函数原型:extern void *memcpy(void *dest, const void *src, size_t count); 用法:#include< ...

最新文章

  1. 清华校友打造Python调试神器
  2. 【mysql】SQL常用指令
  3. 王吉伟:厉害了王坚的《在线》 未来世界还有什么不能被计算?
  4. 没看过这条鄙视链,别轻易说你懂区块链!
  5. 评职称不需英语计算机的文件,《关于重申专业技术人员职称评定、职务聘任必须坚持外语、计算机条件的通知》……...
  6. lottie动画_Lottie内存泄漏问题的定位与分析
  7. MFC的固高环形倒立摆GRIP2002实验平台
  8. 我的天!我靠这个拥有了自己第一架无人机!
  9. 特岗计算机专业知识考试考什么,特岗教师考试笔试内容是什么 应该怎样复习...
  10. Clojure 学习入门(14)- 循环控制
  11. securecrt批量登录linux,SecureCRT批量配置使用会话key
  12. authware链接html文件,authorware是什么软件?
  13. 2021-07-30
  14. 有限元分析简单实例之平面矩形薄板(matlab)
  15. PostgreSQL 常用工具
  16. VFS中的read/write系统调用
  17. acc 蓝牙_蓝牙耳机=音质渣?四大音质超赞的蓝牙耳机推荐
  18. 电网管理信息系统安全运行需求分析
  19. vue 视频隐藏controls功能按钮
  20. COPC Inc.宣布客户服务历程咨询计划

热门文章

  1. java汉字笔画排序
  2. xp系统 共享文件夹服务器,WinXP如何共享文件夹?共享文件夹的方法
  3. Java获取本地ip地址
  4. 64qam带宽计算_烧脑:5G 理论峰值速率是怎么计算的?
  5. 注意啦!使用“流量卡”别图便宜,小心被监控!
  6. 超链接打开qq对话框
  7. 【JCC技术】JCC功能演示
  8. Python做一个“盯盘机器人”,实时监控股票价格并通知你!
  9. 按一个按钮会随机死人_有一个按钮,按下你会获得一千万,但会随机死一个人,你不用因此负责,你会按吗?...
  10. Liunx-安装SonarQuble