C语言内存函数(memcpy、memmove、memcmp)详解

这篇具有很好参考价值的文章主要介绍了C语言内存函数(memcpy、memmove、memcmp)详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、memcpy(string.h)

1.介绍

memcpy函数为内存拷贝函数,既可以拷贝字符串,也可以拷贝整形数组、浮点型数组等,具有明显的应用优势,memcmp,c语言,开发语言

destination为目的地空间,source为不可修改(const)的来源空间,num表示无符号的字节数。其主要含义为将source内容拷贝到destination中,拷贝num个字节数。其返回类型、目的地、来源类型均为void* ,void*可以接收任意类型的参数。因为它可以拷贝多种不同类型的内容,运用单一的类型,就限制了其拷贝的内容了。size_t表示无符号数。

返回时会返回目的地的起始位置地址。

下面我们通过几个例子了解一下它的用途。

2.例子

2.1 例一

memcmp,c语言,开发语言

 通过例一我们发现,memcpy函数将arr1的前5个字节数拷贝进了arr2数组中因为char类型的变量所占的字节数为1,所以abcde都拷进了arr2中。返回值为arr2数组的起始位置的地址。

2.2 例二

memcmp,c语言,开发语言

例一和例二的不同点在于多拷贝了一个字节,将arr1中的字符'\0'拷进了arr2中,因此在打印arr2数组时遇见了拷贝进去的字符'\0',因此它只会打印'\0'之前的内容,所以打印出的结果为abcde。

这也就说明了内存拷贝函数memcpy不会去管拷贝内容究竟是什么,只要没到达我拷贝的字节数,那就嘎嘎拷贝就完了。

2.3 例三

memcmp,c语言,开发语言

例三不为字符的拷贝了,为整形数组的拷贝,与浮点数拷贝两者相同。 也是将arr1中的前20个字节数,也就是5个整形变量,拷贝进了arr2中,其主要关键的点在于20表示的意思为前20个字节数。当然,如果你拷贝前19个字节,就会出现一些问题,所以拷贝时尽量按照一个变量所占字节数的整数倍来进行拷贝。

2.4 例四

memcmp,c语言,开发语言

我们预期结果为1 2 1 2 3 4 5 8 9 10 但实际结果为1 2 1 2 1 2 1 8 9 10。因此达不到我们预期结果。

这是因为我们想将12345拷贝进34567之中,所以1拷贝代替了3,2拷贝代替了4,此时3和4被变成了1和2,那么再拷贝3和4进5和6时,就是1和2拷贝进5和6了,剩下的拷贝也是如此。

应注意,此时目的地空间和来源空间有重叠空间,因此memcpy函数不支持有重叠内存空间的拷贝的,此时我们就需要另一个函数memove来帮助我们处理有重叠空间的内存拷贝。

二、memove(string.h)

1.介绍

memove函数为内存移动函数,也就是将来源空间内容移动到目的地空间之中。相当于拷贝。

memcmp,c语言,开发语言

 其参数类型和返回值和memcpy完全相同,其含义为将source(来源)前num个字节数空间的内容移动到destination(目的地)空间之中,和拷贝含义几乎相同。这就过多介绍了。其用法也基本相同,只不过,memmove函数可以处理重叠内存空间的拷贝。

直接看实例

2.例子

只看一个例子即可,就是重叠内存空间的处理,其他处理和memcpy函数相同。

memcmp,c语言,开发语言

memcmp,c语言,开发语言 

 可以看到,memmove函数可以处理重叠内存空间的拷贝(移动)。因此在使用memcpy和memmove两个函数时要注意其应用条件。

三、memcmp(string.h)

1.介绍

memcmp函数为内存比较函数,其与字符串比较函数strcmp函数相像,不同的是memcmp函数可以既可以比较整形、浮点型,也可以比较字符串。

memcmp,c语言,开发语言

因为是比较函数,所以原来的空间内容是不可被修改的,只能用于比较,因此前两个参数都用了const做修饰。其可以接收任意类型的参数。其基本含义为比较两个空间前num个字节数内容大小,返回值类型为整形,若ptr1 > ptr2,则返回大于0的数字,若等于,则返回0,若小于,则返回小于0的数字。

2.例子

memcmp,c语言,开发语言

memcmp,c语言,开发语言 

memcmp,c语言,开发语言

 比较arr1和arr2前9个字节空间的内容,而arr1和arr2前九个字节相同,因此返回0。

而比较前10个字节的时候,arr2的第10个字节内容大于arr1第10个字节的内容的,因此返回-1,表示arr1小于arr2。

综上,三大内存函数就已完全结束。

 文章来源地址https://www.toymoban.com/news/detail-725186.html

 

到了这里,关于C语言内存函数(memcpy、memmove、memcmp)详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言内存操作函数,memcpy的使用和模拟实现,memmove的使用和模拟实现,memcmp的使用,memset的使用。

    函数原型: void *dest 目标数据首元素地址 const void *src 源数据(需要拷贝过去的数据) size_t count 需要拷贝数据的字节大小 void *memcpy 拷贝结束后,返回目标数据的起始地址 函数作用: 拷贝 count 个字节的数据从源数据起始地址到目标空间。 函数的使用 函数的模拟实现: 注:

    2024年02月09日
    浏览(44)
  • memcpy、memmove、memcmp、memset函数的作用与区别

    作用: 从source的位置开始向后复制num个字节的数据到destination的内存位置。 注意: memcpy() 函数在遇到 ’\\0’ 的时候 不会停下来 (strcpy字符串拷贝函数在遇到’\\0’的时候会停下来); destination和source 所指向的内容不能重叠, 否则得不到想要的结果。 void* memcpy(void* destination

    2024年02月14日
    浏览(34)
  • 【C语言】内存函数memcpy和memmove的功能与模拟实现

    1.memcpy 功能:把source指向的前num个字节内容拷贝到destination指向的位置去,可以拷贝任意类型的数据。 注:1.memcpy并不关心\\0,毕竟传的也不一定是字符串,因此拷贝过程中遇到\\0也不会停下来。 2.num的单位是字节,并不是要拷贝的元素个数 3.如果source和destination有任何的重叠

    2024年02月19日
    浏览(40)
  • 【C语言内存函数精选】memcpy、memset、memmove及仿真实现!掌握内存操作的艺术!

    ❤️ 博客主页: 小镇敲码人 🍏 欢迎关注:👍点赞 👂🏽留言 😍收藏 🌞 任尔江湖满血骨,我自踏雪寻梅香。 万千浮云遮碧月,独傲天下百坚强。 男儿应有龙腾志,盖世一意转洪荒。 莫使此生无痕度,终归人间一捧黄。🍎🍎🍎 ❤️ 我的努力求学没有得到别的好处,只

    2024年02月15日
    浏览(39)
  • 【C语言】memmove()函数(拷贝重叠内存块函数详解)

    🦄 个人主页 :修修修也 🎏 所属专栏 :C语言 ⚙️ 操作环境 : Visual Studio 2022 目录  一.memmove()函数简介 1.函数功能 2.函数参数 1.void * destination 2.onst void * source 3.size_t num 3.函数返回值 4.函数头文件 二.memmove()函数的具体使用 1.使用memmove()函数完成拷贝整型数组数据(目的地与源重

    2024年02月06日
    浏览(38)
  • C语言—模拟实现memcpy,memmove

    函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。 这个函数在遇到 \\\'\\0\\\' 的时候并不会停下来。 如果source和destination有任何的重叠,复制的结果都是未定义的。 其实要实现memcpy非常的简单,我们不管传进来的是哪种数据类型都统一强转为char*,我们知

    2024年02月15日
    浏览(37)
  • 【C语言】memcpy()函数(内存块拷贝函数)

    🦄 个人主页 :修修修也 🎏 所属专栏 :C语言 ⚙️ 操作环境 : Visual Studio 2022 目录 一.memcpy()函数简介 🎏函数功能 🎏函数参数 📌void * destination 📌const void * source 📌size_t num 🎏函数返回值 🎏函数头文件 二.memcpy()函数的具体使用 🎏使用memcpy()函数完成拷贝整型数组数据 🎏使

    2024年02月05日
    浏览(37)
  • 【c++中内存拷贝函数(C++ memcpy)详解】

    原型 :void*memcpy(void*dest, const void*src,unsigned int count);  功能 :由src所指内存区域复制count个字节到dest所指内存区域。   说明 :src和dest所指内存区域不能重叠,函数返回指向dest的指针。     举例 :  下面自行实现这个函数 程序清单 1 V0.1版程序  程序清单 2 测试V0.1用例   

    2023年04月20日
    浏览(33)
  • 提升内功之模拟实现库函数strlen/strncpy/strcmp/strcat/strstr/memcpy/memmove

    strlen函数的作用就是求字符串的首元素开始往后计算字符串的长度,直到’\\0‘,但不会把\\0的长度计算进去 strncpy的作用就是从source指向的字符串复制num个字节的内容到destination指向的字符串去 如果source的长度小于num,则填充0 注意source和destination的内容在空间上不要重叠,如

    2024年02月16日
    浏览(45)
  • memcmp函数详解 看这一篇就够了-C语言(函数讲解、函数实现、使用用法举例、作用、自己实现函数 )

    memcmp()函数用于:比较两个内存块 函数声明:int memcmp ( const void * ptr1, const void * ptr2, size_t num ); 参数: ptr1:指向内存块的指针。 ptr2:指向内存块的指针。 数字:要比较的字节数。 返回值: 0: 在两个内存块中不匹配的第一个字节在  ptr1  中的值低于 在 ptr2  中的值(如果计

    2023年04月09日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包