广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言内存函数memcpy,memmove,memcmp
  • 609
分享到

C语言内存函数memcpy,memmove,memcmp

2024-04-02 19:04:59 609人浏览 安东尼
摘要

目录一、memcpy函数1.用法2.模拟实现memcpy函数二、memmove函数1.用法2.模拟实现memmove函数三、memcmp函数1.用法2.模拟实现memcmp函数一、m

一、memcpy函数

1.用法

memcpy表示内存函数,用法跟strcpy差不多, 都是作为拷贝函数存在
strcpy只能用于字符串函数,而memcpy函数可以使用任意类型
在使用任意类型时,肯定用到的参数是void
void* memcpy(const void *dest,const void *src, size_t sum);
这里的sum作为字节数传递

#include<stdio.h>
#include<string.h>
int main()
{
 int arr[10]={0};
 int arr2[10]={1,2,3,4,5,6,7,8,9,10};
 memcpy(arr1,arr2,20);//1 2 3 4 5   /20作为字节数 即传递4个整形
 return 0;
}

2.模拟实现memcpy函数

#include<stdio.h>
#incldue<assert.h>
void*mymemcpy(const void*dest,const void*src,size_t sum)//size_t说明作为无符号数存在
{
 assert(dest&&src);
 void*ret=dest;
  while(sum--)//void*的指针 无法解引用和自加自减,解引用不知道访问几个字节,自加自减不知道跳过结果字节  
  {
   *(char*)dest=*(char*)src;//这里不使用自加的原因: 因为强制类型转换是一种临时的状态 如果到++时,指针会变回void*  
   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,10};
 mymemcpy(arr1,arr2,20);//传递4个整形
 return 0;
 }

二、memmove函数

1.用法

memmove函数是用于处理内存重叠的情况
参数同memcpy函数相同
voidmemmove(const void dest,const void*src,size_t sum);

#include<stdio.h>
#include<string.h>
int main()
{
 int arr[]={1,2,3,4,5,6,7,8,9,10};//将 1 2 3 4 5传给 3 4 5 6 7
 memmove(arr+2,arr,20);//结果为 1 2 1 2 3 4 5
 return 0;
}

2.模拟实现memmove函数

#include<stdio.h>
#include<assert.h>
void*mymemmove(const void*dest,const void*src,size_t sum)
{
 assert(dest&&src);
 void*ret=dest;//返回目的地的初始地址
  if(src>dest)//src大于dest指针时 从前往后传递
  {
  while(sum--)
   {
     *(char*)dest=*(char*)src;
     dest=(char*)dest+1;
     src=(char*)src+1;
   }
  }
  else//src小于dest指针时 从后往前传递
  {
  while(sum--)
   {
     *(char*)(dest+sum)=*(char*)(src+sum);
   }
  }
  return ret;
}
   
int main()
{
 int arr[]={1,2,3,4,5,6,7,8,9,10};
 mymemmove(arr+2,arr,20);//20代表字节数 即传递5个整形
 return 0;//1 2 1 2 3 4 5
}

当3 4 5 6 7 传递给 1 2 3 4 5时
src>dest指针 从前往后传递

当1 2 3 4 5传递给 3 4 5 6 7时
src>dest指针 从后往前传递

三、memcmp函数

1.用法

同strcmp函数用法差不多 都为比较函数
但strcmp只能比较字符串之间的大小
而 memcmp函数可以比较任意类型的大小
int memcmp(const void * s1,constvoid* s2,size_t sum);

#include<stdio.h>
#include<string.h>
int main()
{
 int arr1[]={1,2,3,4,5};
 int arr2[]={1,1,3,4,5};
 memcmp(arr1,arr2,8);//8为字节数 即2个整形
 return 0;
}

2.模拟实现memcmp函数

#include<stdio.h>
#include<assert.h>
int memcmp(const void*s1,const void*s2,size_t sum)
{
  assert(s1&&s2);
  char*pa=(char*)s1;
  char*pb=(char*)s2;
  while(sum--)
  {
   if(*pa==*pb)//两者有相同才向后移 没有就等sum减为0 输出 看是大于还是小于
   {
    pa++;//如果两者一直相同 不影响判断条件sum 出循环输出
    pb++;
   }
  }
  return *pa-*pb;
}
int main()
{
 int arr1[]={1,2,3,4,5};
 int arr2[]={1,1,3,4,5};
 int ret= memcmp(arr1,arr2,8);//8为字节数 即2个整形
 printf("%d\n",ret);//1
 return 0;
} 

到此这篇关于C语言内存函数 memcpy,memmove ,memcmp的文章就介绍到这了,更多相关C语言内存函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言内存函数memcpy,memmove,memcmp

本文链接: https://www.lsjlt.com/news/167621.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言内存函数memcpy,memmove,memcmp
    目录一、memcpy函数1.用法2.模拟实现memcpy函数二、memmove函数1.用法2.模拟实现memmove函数三、memcmp函数1.用法2.模拟实现memcmp函数一、m...
    99+
    2022-11-13
  • C语言怎么实现memcpy与memmove函数
    本文小编为大家详细介绍“C语言怎么实现memcpy与memmove函数”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言怎么实现memcpy与memmove函数”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一...
    99+
    2023-06-29
  • C语言 模拟实现memcpy与memmove函数详解
    目录一、memcpy函数的介绍1.函数的声明2.函数功能与注意事项3.函数的使用二、模拟实现memcpy函数1.模拟分析2.模拟实现三、memmove函数的介绍1.函数的声明2.为什...
    99+
    2022-11-13
  • C语言模拟内存函数分析之mencpy与memmove
    目录前言模拟实现简单的内存函数1.memcpy-内存拷贝函数(应该拷贝不重叠的内存)2.memmove-内存拷贝函数(可以拷贝重叠的内存)总结前言 内存是CPU与外存进行沟通的桥梁。...
    99+
    2022-11-13
  • C语言中memcmp函数有什么用
    这篇文章主要介绍了C语言中memcmp函数有什么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。memcmp作用:内存比较函数原型:int memcmp( ...
    99+
    2023-06-03
  • C语言memcpy函数怎么使用
    memcpy函数是C语言中的一个内存拷贝函数,用于将源内存区域的数据复制到目标内存区域。它的函数原型如下:```cvoid* mem...
    99+
    2023-09-08
    C语言 memcpy
  • C语言中memmove函数有什么用
    这篇文章将为大家详细讲解有关C语言中memmove函数有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。memmove作用:内存拷贝(可拷贝重叠内存)原型:void *memmove(&nb...
    99+
    2023-06-03
  • C语言中memcpy函数有什么用
    这篇文章主要为大家展示了“C语言中memcpy函数有什么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C语言中memcpy函数有什么用”这篇文章吧。memcpy作用:内存拷贝函数原型:void...
    99+
    2023-06-03
  • 详解C语言中strcpy函数与memcpy函数的区别与实现
    目录字符串拷贝函数(strcpy)函数原型应用实例缺点内存拷贝函数(memcpy)函数原型应用实例memcpy的模拟实现(my_memcpy)实现样例具体实现字符串拷贝函数(strc...
    99+
    2022-12-29
    C语言 strcpy memcpy区别 C语言 strcpy memcpy实现 C语言 strcpy memcpy
  • C语言动态内存函数详解
    目录动态开辟空间的原因 1、malloc函数2、free函数3、calloc函数4、realloc函数总结动态开辟空间的原因 静态开辟空间是固定的,数组在申明的时候必须指定数组的长...
    99+
    2022-11-12
  • C语言内存操作函数详解
    目录头文件:#include<memory.h>1.memcpy2.memmove3.memcmp4.memset总结头文件:#include<memory.h&g...
    99+
    2022-11-12
  • C语言字符串函数与内存函数精讲
    目录strlenstrcpystrcatstrcmpstrncpystrncatstrncmpstrstrstrtokstrerrortolower\touppermemcpymem...
    99+
    2022-11-13
  • C语言字符串函数与内存函数怎么用
    这篇“C语言字符串函数与内存函数怎么用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言字符串函数与内存函数怎么用”文章吧...
    99+
    2023-06-30
  • C语言的编程之美之内存函数
    目录内存函数memcpy内存拷贝原格式分析内存拷贝的问题memmove内存重叠拷贝C语言规定原格式分析memset内存设置原格式memcmp内存比较原格式总结内存函数 memcpy内...
    99+
    2022-11-12
  • C语言的字符串函数,内存函数笔记详解
    目录strlenstrlen模拟实现strcpystrcpy的模拟实现strcatstrcat的模拟实现strcmpstrcmp模拟实现strstrstrstr模拟实现strncpy...
    99+
    2022-11-12
  • C语言字符串函数和内存函数怎么使用
    本文小编为大家详细介绍“C语言字符串函数和内存函数怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言字符串函数和内存函数怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。字符串函数长度不受限制的字...
    99+
    2023-06-30
  • c语言重要的字符串与内存函数
    目录一.字符串函数1. 求字符串长度的strlen2.比较字符串大小的strcmp3.复制字符串的strcpy4.追加字符串的strcat5.查找字符串函数的strstr二、内存函数...
    99+
    2022-11-12
  • C语言动态内存分配函数的实现
     在C中我们开辟内存空间有两种方式 : 1.静态开辟内存 :例如: int a;int b[10];  这种开辟内存空间的特点是 所开辟的内存是在栈中开...
    99+
    2022-11-12
  • C语言初识动态内存管理malloccallocreallocfree函数
    目录一、为什么存在动态内存分配二、动态内存函数的使用1.malloc函数(1)malloc的定义(2)malloc函数的注意事项(3)malloc函数的使用2.calloc函数(1)...
    99+
    2022-11-13
  • C语言超详细讲解字符串函数和内存函数
    目录字符串函数长度不受限制的字符串函数strlenstrcpystrcatstrcmp长度受限制的字符串函数介绍strncpystrncatstrncmp字符串查找以及错误报告str...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作