gpt4 book ai didi

c - 如何将数据从一个结构指针复制到另一个结构成员

转载 作者:太空宇宙 更新时间:2023-11-04 04:48:52 25 4
gpt4 key购买 nike

我正在将结构的地址传递给函数。

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 中的 union 体,value 是 union 体的成员,data 是 unsigned char 数组。

我应该如何对 msg.messageData.value.data 执行 elem->data 的 memcpy? (elem->data 是一个unsigned char 的数组)

谢谢!!!

最佳答案

语句崩溃,因为指针为 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){

在这里您访问了 NULL 指针,幸运的是您崩溃了。

        // 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 的目标。

关于c - 如何将数据从一个结构指针复制到另一个结构成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18039899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com