标题: 关于C语言数组拷贝 [打印本页]

作者: happy2058    时间: 2024-6-6 19:50
标题: 关于C语言数组拷贝
函数1    temp arr[20]={};
函数2长度不固定,最大20个元素,以0x33结尾    arr[]={};

把函数2拷贝到函数1去,单片机可以用sizeof函数配合memcpy函数吗。
memcpy是内存复制函数未尝试过在单片机使用。


作者: Y_G_G    时间: 2024-6-7 01:06
声明两个结构体,在结构体中声明数组,然后就可以直接用
结构体1 = 结构体2
作者: rundstedt    时间: 2024-6-7 06:49
sizeof只能判断正常的0x0结束符,无法判断楼主自定义的0x33结束符,所以完全不可能。
作者: yzw846562238    时间: 2024-6-7 08:56
可以用,但是你要保证数组1的长度≥数组2;然后你是要拷贝到0x33那个字节,后面都不拷贝?那这样的话就不能用这个方法了。另外以0x33做结尾是否有点草率,万一你前面的数据中包含了0x33这个字符呢
作者: lkc8210    时间: 2024-6-7 10:01
memcpy(temp_arr,arr,sizeof(arr) / sizeof(arr[0]));
作者: yzw846562238    时间: 2024-6-7 13:28
lkc8210 发表于 2024-6-7 10:01
memcpy(temp_arr,arr,sizeof(arr) / sizeof(arr[0]));

你这个写法不对,memcpy是按字节拷贝的,不需要/sizeof(arr[0])
作者: Eren0528    时间: 2024-6-7 16:48
可以没有任何问题
作者: 3212432202    时间: 2024-6-7 17:07
为方便说明,定义两个整型数组a,b,并实现将a中的值赋值到b中。 int a[4] = {1,2,3,4}, b[4];  1、 通过数组遍历,逐个赋值。 定义循环变量int i; for(i = 0; i < 4; i ++) b[i] = a[i]; 该程序功能为遍历数组a,逐个赋值到数组b对应元素中。  2、 借助内存复制函数memcpy,整体赋值。 void *memcpy(void *dst, void *src, size_t size); 这个函数的功能为将src上,大小为size字节的数据赋值到dst上。 调用该函数时需要引用头文件cstring,即 #include 赋值数组的代码为 memcpy(b,a,sizeof(a));
作者: wufa1986    时间: 2024-6-7 17:18
自己封装一个就行了,为什么非得用标准的函数处理非标准的问题
作者: lkc8210    时间: 2024-6-7 17:43
yzw846562238 发表于 2024-6-7 13:28
你这个写法不对,memcpy是按字节拷贝的,不需要/sizeof(arr[0])

受教了
作者: happy2058    时间: 2024-6-7 22:08
3212432202 发表于 2024-6-7 17:07
为方便说明,定义两个整型数组a,b,并实现将a中的值赋值到b中。 int a[4] = {1,2,3,4}, b[4];  1、 通过数 ...

sizeof(a)是所有节字数,memcpy(b,a,sizeof(a));可以适用int 和char 是吧,谢谢




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1