Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何将数据从一个结构指针复制到另一个结构成员_C_Pointers_Structure_Memcpy - Fatal编程技术网

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-该联合成员的字符数组[]。