C语言内存操作函数详解
作者:wwhdsg 发布时间:2021-09-01 01:50:36
标签:C语言,内存,操作,函数
头文件:#include<memory.h>
1.memcpy
作用:内存拷贝
函数原型:
void *memcpy( void *dest, const void *src, size_t count );
使用:
使用格式:memcpy(目的地,原,想操作内存大小(单位字节))
把 "参数2" 起始的 "参数3" 个字节 内容拷贝到 "参数1 '
memecpy函数类似于strncpy。
例:
#include <memory.h>
#include <string.h>
#include <stdio.h>
int main()
{
int aa[] = { 1,2,3,4 };
int bb[10] = { 0 };
memcpy(bb, aa, 4 * sizeof(int));//把aa数组中4*4(每个int类型是4字节)内容拷贝到bb数组
for (int i = 0; i < 10; i++) //打印bb数组全部数据
{
printf("%d ", bb[i]);
}
}
最后bb字符串中前4*4个字节的内容被改为aa的内容
注意 :memcpy不能拷贝重叠内存。
#include <memory.h>
#include <string.h>
#include <stdio.h>
int main()
{
int aa[] = { 1,2,3,4,5,6,7,8,9,10 };
my_memcpy(aa + 2, aa, 24);
for (int i = 0; i < 10; i++)
{
printf("%d ", aa[i]);
}
}
输出:
拷贝重叠内存会出现这样的问题。
2.memmove
作用:内存拷贝(可拷贝重叠内存)
原型:
void *memmove( void *dest, const void *src, size_t count );
使用与memcpy一样,只是memmove可以拷贝重叠内存
#include <memory.h>
#include <string.h>
#include <stdio.h>
int main()
{
int aa[] = { 1,2,3,4,5,6,7,8,9,10 };
memmove(aa + 2, aa, 24);
for (int i = 0; i < 10; i++)
{
printf("%d ", aa[i]);
}
}
出:
同样的代码使用memmove就可以.
3.memcmp
作用:内存比较
函数原型:
int memcmp( const void *buf1, const void *buf2, size_t count );
使用:
使用格式:memcmp(地址1,地址2,想要比较的内存大小 单位bit)
逐字节比较内存大小,
逐字节一对一对比较!!
返回值有三种情况:
<0 “参数1” 与 “参数2” 逐字节比较时遇到的第一对不同的内存时 “参数1” 中数据 < “参数2”。
=0 “参数1” 与 “参数2” 中的前“ 参数” 三个字节的内容完全相等。
>0 “参数1” 与 “参数2” 逐字节比较时遇到的第一对不同的内存时 “参数1” 中数据 > “参数2”。
4.memset
作用:内存设置
函数原型:
void *memset( void *dest, int c, size_t count );
使用:
使用格式:memset(地址,一个数,设置多少字节)
例:
#include <memory.h>
int main()
{
int a[] = {1,2,3,4,5};
memset(a, 1, 20);//把从a开始的前二十个字节内容改成1
}
结果:
来源:https://blog.csdn.net/wwhdsg/article/details/120740424


猜你喜欢
- springboot 配置多个jndi数据源1.在application.properties中,添加jndi配置如下图2.新建dataSo
- 本文实例讲述了Android编程实现调用相册、相机及拍照后直接裁剪的方法。分享给大家供大家参考,具体如下:package com.cvte.
- 一、背景假如:黑客黑进了数据库,或者离职人员导出了数据,那么就可能导致这些敏感数据的泄漏。因此我们就需要找到一种方法来解决这个问题。二、解决
- HashMap和Hashtable的比较是Java面试中的常见问题,用来考验程序员是否能够正确使用集合类以及是否可以随机应变使用多种思路解决
- 最近因为项目需要,自己实现了个可以自由移动,并且长按可以跳出一个控制播放的,大的悬浮窗。好,开始吧。首先我们先聊权限,悬浮窗需要在manif
- 操作步骤如下一、dropzone导入01.dropzone官网下载其插件压缩包并复制项目;02.将CSS和JS文件在HTML文件中引入;//
- 一、Java把这些不同来源和目标的数据都统一抽象为数据流。Java语言的输入输出功能是十分强大而灵活的。在Java类库中,IO部分的内容是很
- PhotoView的简介:这是一个图片查看库,实现图片浏览功能,支持pinch(捏合)手势或者点击放大缩小。支持在ViewPager中翻页浏
- 页面:上传文件时的关键词:enctype="multipart/form-data"<%@ page langua
- 本文实例为大家分享了Android实现手势密码功能的具体代码,供大家参考,具体内容如下首先声明一下,九宫格布局是从网上扒了一个大神写好的,大
- 这篇文章主要介绍了Spring AOP AspectJ使用及配置过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考
- Android Studio在实现隐藏标题栏和状态栏上和Eclipse是完全不一样的。在Eclipse上隐藏标题栏和状态栏的代码如下:方法一
- 本文实例讲述了WPF的ListView控件自定义布局用法。分享给大家供大家参考,具体如下:概要:以源码的形式贴出,免得忘记后,再到网上查资料
- 以前看到过个:Java开发手册(阿里巴巴-公开版),这是个pdf文档,里面描述了一些Java开发的规约,里面确实有很多好用的规约,要是在学校
- 在VF、VB、PB的应用中,有些无法通过语言工具本身来完成的或者做得不理想的功能,我们会考虑通过Windows的API来完成。在那个年代,熟
- 开始学习WebSocket,准备用它来实现一个在页面实时输出log4j的日志以及控制台的日志。首先知道一些基础信息:1.java7 开始支持
- 本文主要是用到java中的swing技术,以及JMFjar中的API,为大家分享了java音乐播放器的具体实现代码,供大家参考,具体内容如下
- 一、问题背景在Intellij idea中,新建Maven项目,在魔项目中新建多个模块,发现模块间相互调用失败二、问题原因模块间无法相互引用
- 这篇文章主要介绍了JAVA如何定义构造函数过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可
- 一,功能介绍本点单系统主要是基于SpringBoot框架和小程序开发的,主要是为当代人们的生活提供更便利、更高效的服务,也为营销者提供更好的