前言

我们为什么要用内存操作函数?

内存函数,是通过访问地址的方式操作对象,因此可应用于任何类型对象,只要按照字节操作


1. memcpy

void * memcpy ( void * destination, const void * source, size_t num );
  • 函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置
  • 此函数在遇到\0(参考字符串)时不会停下来
  • 如果source和destination有任何的重叠,复制的结果都是未定义的
/* memcpy example */
#include <stdio.h>
#include <string.h>
struct {char name[40];int age;
} person, person_copy;
int main ()
{char myname[] = "Pierre de Fermat";/* using memcpy to copy string: */memcpy ( person.name, myname, strlen(myname)+1 );person.age = 46;/* using memcpy to copy structure: */memcpy ( &person_copy, &person, sizeof(person) );printf ("person_copy: %s, %d \n", person_copy.name, person_copy.age );return 0;
}

由上代码可知,memcpy可以将整个结构体拷贝给另一个结构体。当然也可以拷贝整个数组及其他内容


2.memmove

void * memmove ( void * destination, const void * source, size_t num );
  • 与memcpy类似,差别是memmove函数处理的源内存块和目标内存块是可以重叠的
  • 如果源空间和目标空间出现重叠,就得使用memmove函数处理
/* memmove example */
#include <stdio.h>
#include <string.h>
int main ()
{char str[] = "memmove can be very useful......";memmove (str+20,str+15,11);puts (str);return 0;
}


可见,对于C语言中重叠内存内存的拷贝应交给:memmove


3.memcmp

int memcmp ( const void * ptr1, const void * ptr2, size_t num );
  • 比较从ptr1和ptr2指针开始的num个字节
  • 返回值如下图:
/* memcmp example */
#include <stdio.h>
#include <string.h>
int main ()
{char buffer1[] = "DWgaOtP12df0";char buffer2[] = "DWGAOTP12DF0";int n;n=memcmp ( buffer1, buffer2, sizeof(buffer1) );if (n>0) printf ("'%s' is greater than '%s'.\n",buffer1,buffer2);else if (n<0) printf ("'%s' is less than '%s'.\n",buffer1,buffer2);else printf ("'%s' is the same as '%s'.\n",buffer1,buffer2);return 0;
}

此处比较字符对应的ASCII码值


4.memset

void * memset ( void * ptr, int value, size_t num );
  • 内存设置函数,将指针ptr指向的内存块前num字节改为设定值
/* memset example */
#include <stdio.h>
#include <string.h>
int main()
{int arr[] = { 0x10101010,0x20202020,0x30303030,0x40404040,0x50505050 };memset(arr, 0, 20);return 0;
}

memset执行前,arr的内存所保存值是

memset执行后,arr的内存所保存值是


如果本文对你有所帮助,请帮忙点赞+收藏,如果有任何建议请评论留言!

C语言中常见的四个内存函数相关推荐

  1. C语言中常见数据类型和对应内存空间大小

    C语言的数据类型是指变量所能存储的数据范围和格式的类型.C语言提供了以下几种基本的数据类型: int类型:int类型用于存储整数(正数.负数.零).它可以有不同的位数,例如int类型可以是16位.32 ...

  2. 对Java中常见的四种I/O模型理解

    对Java中常见的四种I/O模型理解 1.1 知识科普 1.1.1 同步阻塞I/O(Blocking I/O) 1.1.1.1 阻塞与非阻塞 1.1.1.2 同步与异步 1.1.1.3 同步阻塞I/O ...

  3. java语言变量分为_在Java语言中变量分为四种,分别是___________________________________________。_学小易找答案...

    [填空题]One day, at the registrar's office of a college, I noticed how parents are behaving with their ...

  4. c语言初学者常见错误归纳,C语言中常见错误分析.doc

    C语言中常见错误分析 摘要:C语言是许多高校开设的第一门程序设计语言,使用方便灵活.根据C语言的特点,并结合实际教学,对在编程中经常遇到的错误进行分析.总结,为初学者尽快掌握C语言,提高程序设计水平提 ...

  5. Go语言中常见的并发模式

    Go语言最吸引人的地方是它内建的并发支持.Go语言并发体系的理论是C.A.R Hoare在1978年提出的通信顺序进程(Communicating Sequential Process,CSP).CS ...

  6. C语言中多维数组的内存分配和释放(malloc与free)(转)

    C语言中多维数组的内存分配和释放(malloc与free)(转) 写代码的时候会碰到多维数组的内存分配和释放问题,在分配和释放过程中很容易出现错误.下面贴上一些示例代码,以供参考. 如果要给二维数组( ...

  7. c语言常见错误分析和程序调试,C语言中常见错误分析及程序调试

    总结分析了C语言中常见错误及程序调试的相关技巧,以提高初学者的编程能力. 2 8 2月 0年l 0 电脑学习 第6 期 C语言中常见错误分析及程序调试 陈伟' 陈东淼 摘要:总结分析了 C语言中常见错 ...

  8. C语言中常见的符号和注释的用法

    文章目录 前言 一.换行符号\n \n的具体用法和作用 二.取地址符号& &的具体用法和作用 三.注释 注释的格式 注释的作用 注释在代码中的具体体现 总结 前言 本篇文章主要给大家讲 ...

  9. c语言 字符串 strncpy,详解c语言中的 strcpy和strncpy字符串函数使用

    详解c语言中的 strcpy和strncpy字符串函数使用 strcpy 和strcnpy函数--字符串复制函数. 1.strcpy函数 函数原型:char *strcpy(char *dst,cha ...

最新文章

  1. Android进程间通信的方式
  2. 清空memcached中缓存的数据的方法
  3. E-mail Composition and Decoding
  4. 华为配置(S3100)
  5. Linux一键安装Lnmp
  6. 状压dp之二之三 炮兵阵地/玉米田 By cellur925
  7. [转]listview中设置背景图片后 拉动变黑
  8. 嵌入式 uboot引导kernel,kernel引导fs【转】
  9. 最长公共子序列-动态规划(C/C++)
  10. Proteus8.6 安装教程
  11. 常见图像加密性能评价指标(详解加python实现)
  12. 微软服务器版本组建nas,怎么用windows server 2012组建家用nas服务器
  13. 或且非 java_Java的运算符号(逻辑与、或、非、移位运算)
  14. 速途在线沙龙11期:王通夫唯首次聚首共话SEO
  15. 2G,3G,4G,5G的不同之处
  16. applet 打印的属性和配置
  17. JavaScript实现在线websocket WSS测试工具 -toolfk程序员工具网
  18. 基于javaweb的学生综合素质评价系统(java+ssm+thymeleaf+layui+mysql)
  19. LIO-SAM:点云预处理前端---畸变矫正数据预处理
  20. python报错系列(9)--SyntaxError: Missing parentheses in call to ‘print‘. Did you mean print()

热门文章

  1. 【leetcode】LCP51. 烹饪料理
  2. 如何高效检查钢网开口?
  3. 禁止Chrome浏览器自动更新 亲测可用
  4. 《安全周报》2010年12月第5期
  5. el-descriptions 跨列和相关样式
  6. 基于10代硬件下的HTPC/NAS一体打造全记录
  7. 关于ESXI显卡直通(VmDirectPath),使虚拟机变成HTPC的若干经验
  8. 大数据Spark入门案例5–统计广告点击数量排行Top3(scala版本)
  9. linux火狐网页无声音,解决Firefox在Ubuntu下播放Flash无声音的问题
  10. 浅谈Linux信号那些事