首页 > 其他分享 >unsigned char数组拷贝数据段,置0数据段,未越界方法

unsigned char数组拷贝数据段,置0数据段,未越界方法

时间:2023-07-31 16:45:46浏览次数:40  
标签:越界 int unsigned srcArray char 数组 destArray 拷贝

需要注意的是,自己去写C语言场景下数组的拼接,得不偿失,因为涉及到了数组的拼接,就会有动态分配内存,目前C语言是没有这个功能的;自己写会容易内存报错;
因此,在涉及到C语言数组时,最好是只有拷贝,赋值等操作,在一开始确定数组时,把内存分配大一些;

这里主要对内存越界的地方做个封装;然后可以实现数组内的某段数据的拷贝;

//目标数组,目标数组的起始位置
//拷贝数组,拷贝数组的起始位置,拷贝数组的截至位置(包含前后两个下标处也拷贝)
//这里必须保证的是第一个数组大小必须很大,能够容纳拷贝的数据
// ****************************   目标数组最好很大,不能超过目标数组的内存
//          *********             大概第二个数组大小
//ArrayNumber用于判断数组内存越界的情况
void ArrayCopy(unsigned char *destArray, int destArrayNumber,const int destStartIndex,
	           unsigned char *srcArray, int srcArrayNumber, const int srcStartIndex, const int srcEndIndex)
{
	if (srcEndIndex - destStartIndex >srcArrayNumber){
		cout << "内存越界" << endl;
		return;
	}
	if (destStartIndex + srcEndIndex - srcStartIndex > destArrayNumber){
		cout << "内存越界" << endl;
		return;
	}
	memcpy(destArray + destStartIndex, srcArray + srcStartIndex, srcEndIndex - srcStartIndex + 1);
}

//数组某一段数据的置0(包含前后两个下标处也置0)
//最后一个数据用于判断数组内存越界的情况
void NullArray(unsigned char *src, int srcNumber,const int StartIndex, const int EndIndex)
{
	if (EndIndex - StartIndex > srcNumber){
		cout << "内存越界" << endl;
		return;
	}
	memset(src + StartIndex, 0 , EndIndex-StartIndex + 1);
}

主函数的调用:

int main()
{
    unsigned char destArray[10] = { 0x3, 0x35 };                                        // 示例目标数组
	unsigned char srcArray[5] = { 0x01, 0x02, 0x03, 0x04, 0x05 };                       // 示例源数组
	
	NullArray(destArray, sizeof(destArray), 0, 1);                                      //把0到1下标处置0
	
	ArrayCopy(destArray,sizeof(destArray), 12, srcArray, sizeof(srcArray), 0, 5);   //内存越界

	ArrayCopy(destArray,sizeof(destArray), 2, srcArray, sizeof(srcArray), 0, 4);    //把源数组的0到4数据段拷贝到目标数组的3起始处

    system("pause");
	return 0;
}

标签:越界,int,unsigned,srcArray,char,数组,destArray,拷贝
From: https://www.cnblogs.com/zhuchunyu123/p/17593817.html

相关文章

  • IDEA,Pycharm,Goland,Webstorm 最新发布2023.2版本,亲测好用!
    期待已久的IntelliJIDEA2023.2终于正式发布了,同时发布的还有Pycharm,Goland,Webstorm等。具体的改变相信大家已经提前有所了解的了,我迫不及待的就下载体验了下,UI变好看了,使用起来感觉更流畅,好用推荐!IDEA2023.2最新版激活成功如下GoLand2023.2最新版激活成功如下......
  • echarts 自定义提示框
    consttooltip=(params,echartsBarData)=>{constresult=params.map((item,index)=>{conststr=item.name.substring(0,1);if(echartsBarData[index].drugNameCosList){constdata=echartsBarData[index].drugNameCosList.filter(......
  • python Pycharm出现“can't find '__main__' module”解决方案
    是配置没配对,因为在配置时没有选择.py文件,而只选择了工程名。因此选择EditConfigurations。选择EditConfigurations后,查看Scriptpath只选择了工程名innerfuns,而这里应该要选择工程名里面的.py文件(main函数,如果没有,选择你要执行的.py文件)。最终可运行成功......
  • mysql 修改varchar
    如何修改MySQL的varchar字段概述在MySQL数据库中,要修改一个已存在的varchar字段,需要经过一系列的步骤。本篇文章将详细介绍每一步的操作和相应的代码示例,帮助初学者完成这个任务。步骤下表展示了修改MySQLvarchar字段的流程和每一步的操作:步骤操作代码示例......
  • 微信wechar(weixin)支持xp和Vista.exe版,32位x86版
    翻看微信官网有没有微信PC版本更新,并查看了官网的更新日志,无意中发现了还有支持XP和Vista系统的版本。一、支持XP和Vista系统的版本下载:1.打开官网:https://weixin.qq.com点击更多日志2.在左侧列表中找到3.3.0版,页面最下面,下载适用于Windows7以下系统的版本经查看,其......
  • uniapp Ucharts 横向bar图 每个设置颜色不同
    代码-------》》》arr=[80,80,80]letvalueList=arr.map((item,index)=>{ letcolor='' letnewNumber=Number(item) if(index==0)color='#5593FE' if(index==1)color='#93b6f8' if(ind......
  • 【Python】使用 pyecharts 模块绘制动态时间线柱状图 ① ( 列表排序 | 使用 sorted 函
    文章目录一、列表排序1、使用sorted函数对容器进行排序2、使用list.sort函数对列表进行排序3、使用list.sort函数对列表进行排序-设置排序函数4、使用list.sort函数对列表进行排序-设置lambda匿名排序函数pyecharts画廊网站:https://gallery.pyecharts.org/#/......
  • Pycharm中c、m、F、f、v、p分别代表的含义
    c代表Class:类m代表Method:类实例方法F代表Function:函数f代表Field:类属性,域v代表Variable:变量p代表Property:python内置函数p代表Parameter:参数<>代表Element:元素Directory:目录Package:包Python中函数(Function)和方法(Method)的区别:与类和实例无绑定关系的function都属于......
  • 解决QT QGraphicsView提升到QChartView报错的问题
    使用QT提供的QChartView来绘制图表,提升QGraphicsView控件继承QChartView后,然后将QGraphicsView提升到我们自己写的类,怎么才能确保提升后编译不报错呢。[问题描述]使用QGraphicsView显示图表的时候,我们需要将它提升为QChartView.但提升后再此运行一般会发生编译报错,错误发生在......
  • pycharm运行代码自动跳转到Python控制台窗口
    问题:在使用Pycharm的过程中,会遇到运行代码Pycharm会自动跳转到Python控制台(pythonconsole)窗口,如下图解决方案:​ 造成上述问题的原因是:不经意的设置了使用Pytho控制台运行,我们只需要修改以下运行配置就可以恢复正常,如下图(1)进入编辑配置:(2)取消勾选使用Python控制台运行......