0

我有以下代码:

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

    if (pArg)
       (STRUCTA *)pArg = abc;
}

问题是,这段代码抛出了以下警告:警告:赋值目标不是真正的左值;这将是未来的一个硬错误

如果没有演员表,我会收到另一个警告,说我正在尝试取消引用 void 指针......

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

有什么办法可以使这项工作?

4

4 回答 4

5

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

*(STRUCTA *)pArg = abc;
于 2010-12-03T08:30:24.797 回答
4

您正在将 a 分配给STRUCTA指向 的指针STRUCTA

而是这样做:

*((STRUCTA *)pArg) = abc;
于 2010-12-03T08:31:56.217 回答
1

尝试这个:

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

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

于 2010-12-03T08:32:31.963 回答
-1

也许pArg = (void *) abc;

编辑:

pArg = (void *) (&abc);?

于 2010-12-03T08:30:43.183 回答