C 如何将数据从一个结构指针复制到另一个结构成员
我正在将结构的地址传递给函数C 如何将数据从一个结构指针复制到另一个结构成员,c,pointers,structure,memcpy,C,Pointers,Structure,Memcpy,我正在将结构的地址传递给函数 void validate(void *ptr) { // A variable of type Msgmt Structure Msgmt msg; memset(&msg, 0, MSG_SIZE); // Type casting the void pointer to this structure dev_t dev_t *elem = (dev_t*)ptr; msg.msg_id = 10;
void validate(void *ptr)
{
// A variable of type Msgmt Structure
Msgmt msg;
memset(&msg, 0, MSG_SIZE);
// Type casting the void pointer to this structure dev_t
dev_t *elem = (dev_t*)ptr;
msg.msg_id = 10;
if (elem->devCategory == VAL){
// This statement crashes the code
// memcpy(msg.messageData.value.data, elem->data, LEN);
// This statement goes through
memcpy(&msg.messageData.value.data,elem->data,LEN) ;
}
// ... do something
}
messageData是struct msg中的联合,value是联合的成员,data是无符号字符的数组
我应该如何将elem->data的memcpy复制到msg.messageData.value.data?elem->data是一个无符号字符数组
谢谢 语句崩溃,因为指针为NULL 在这里,您可以清除成员
memset(&msg, 0, MSG_SIZE);
// Type casting the void pointer to this structure dev_t
dev_t *elem = (dev_t*)ptr;
这是你唯一能初始化的东西
msg.msg_id = 10;
if (elem->devCategory == VAL){
在这里,您可以访问空指针,幸运的是它崩溃了
// This statement crashes the code
// memcpy(msg.messageData.value.data, elem->data, LEN);
在这里,您很可能会损坏其他内存,而不会崩溃
// This statement goes through
memcpy(&msg.messageData.value.data,elem->data,LEN) ;
}
// ... do something
}
您必须为msg.messageData.value.data分配一些已定义的内存,然后才能将其用作memcp的目标。如果您真正想要的是一个开发工具,为什么要使用void*?您能提供所使用数据类型的定义吗?源代码,而不是描述。LEN是如何定义/计算的?所以你假设msg.messageData.value.data是char*,对吗?@alk,你是什么意思?OP将其结构覆盖为0,因此他在注释块中传递给memcp的指针意味着他使用0作为目标指针。它崩溃并不奇怪。在第二条语句中,他传递了指针的地址,这当然有效,因为它在堆栈上,但它不可能是正确的,除非LEN==4。从不完整的样本中,他试图从elem->data复制一些数据结构。我假设数据是一个指针,因为他使用它作为memcp的目标,但是没有看到Msgmt,这很难说。我的意思是,从当前的帖子来看,msg.messageData.value.data是声明为char*还是类似char[].msg-structure、messageData-Union-instruct、value-member-of-Union之类的东西还不清楚,data-该联合成员的字符数组[]。