如何从一个结构指针到另一个结构成员执行数据复制

时间:2013-08-04 05:11:05

标签: 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中的联合,value是union的成员,data是unsigned char的数组。

我该怎样对elem->data发送msg.messageData.value.data的memcpy? (elem->dataunsigned char

的数组

谢谢!!!

1 个答案:

答案 0 :(得分:0)

语句崩溃,因为指针为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的目标。