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

发布时间 2023-07-31 16:41:17作者: 手写不期而遇

需要注意的是,自己去写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;
}