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

标签 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;  
    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/

相关文章:

捕获子进程的退出状态码

python - 从 Python C API 中的字符串导入模块

c++ - Boost-Python 原始指针构造函数

c++ - INC 操作码编译到错误的地址

c++ - 删除 vector 中指针的方法 [C++]

c - C中的节点和链表语法

c - 我们什么时候使用 goto *expr;在C?

c - 在计算文本文件中的行数时,哪一个被认为是更好的代码(出现错误的可能性较小)?

css - 我的 css 在我的 react-redux 元素中来自哪里

R - 改变列表结构