将值赋给C中的非空void *指针的正确方法应该是什么?

时间:2010-12-03 08:28:52

标签: c pointers casting compiler-warnings void-pointers

我有以下代码:

void funcA(void*   pArg)
{
    STRUCTA abc;
    .
    . // Some processing here
    .

    if (pArg)
       (STRUCTA *)pArg = abc;
}
问题是,这段代码抛出了以下警告: 警告:任务目标不是真正的左值;这将是一个很难的错误

如果没有演员,我会再次发出警告,我正试图取消引用无效指针......

由于警告被视为错误,我无法使用此代码 - 但我真的不能使用任何其他指针类型而不是void *作为参数。是否有一个我缺少的优雅解决方案?

有没有办法让这项工作?

4 个答案:

答案 0 :(得分:5)

(STRUCTA *)pArg是指针类型,而abc则不是。您需要取消引用指针:

*(STRUCTA *)pArg = abc;

答案 1 :(得分:4)

您正在为指向STRUCTA的指针指定STRUCTA

相反:

*((STRUCTA *)pArg) = abc;

答案 2 :(得分:1)

试试这个:

memcpy(pArg, &abc, sizeof(abc));

但是,您必须确保pArg指向已分配内存的sizeof(abc)字节。

答案 3 :(得分:-1)

也许pArg = (void *) abc;

编辑:

pArg = (void *) (&abc);