怎么把一个结构体中的数据复制到另一个相同类型的结构体数组中 100

structBACnet_Device_Address{uint8_tmac_len;uint8_tmac[MAX_MAC_LEN];uint16_tnet;uint8_... struct BACnet_Device_Address
{
uint8_t mac_len;
uint8_t mac[MAX_MAC_LEN];
uint16_t net;
uint8_t len;
uint8_t adr[MAX_MAC_LEN];
};
typedef struct BACnet_Device_Address BACNET_ADDRESS;
BACNET_ADDRESS dest;
BACNET_ADDRESS *P_dest[50];
怎么把结构体dest的数据复制到结构体P_dest[50]中?
或者我这样定义有问题吗?BACNET_ADDRESS *P_dest[50];
我直接定义为结构体数组,然后P_dest[i]=dest,没能复制成功,不知道怎么回事
展开
 我来答
memberwin
2015-07-24 · TA获得超过3903个赞
知道大有可为答主
回答量:1000
采纳率:100%
帮助的人:487万
展开全部
可以类似BACNET_ADDRESS *P_dest[50];这样定义, 但要注意这样声明的是一个指针数组,即存50个BACNET_ADDRESS指针的数组,与你的需求不符。应该是直接定义BACNET_ADDRESS P_dest[50];这样P_dest中才能存储结构体
C语言中结构体不能直接整体赋值。
可以使用memcpy函数:
void *memcpy(void *dest, const void *src, size_t n);
其中dest就是需要赋值到的地址, src就是复制源, n是需要复制的字节数。
所以是 memcpy(&P_dest[i], &dest, sizeof(dest));

修正:好吧,又查了下C是支持结构体直接赋值的,但如果结构体中有指针,将是非常不安全的,不过就你的代码来看是没问题的。

你代码不能复制的原因是两者的类型不一致,就是最开始说的P_dest实际上是一个指针数组,而赋值时要把一个结构体赋值给指针导致的错误。只要改下P_dest的声明就成了。
更多追问追答
追问
试了一下,没能复制过去啊
追答
那用memcpy试试, 我这边测试简单的结构体是可以直接赋值的,你的比较复杂就没测试。 顺便问下,没能复制过去是值不对还是就直接报错退出了?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式