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