我有以下代码:
void funcA(void* pArg)
{
STRUCTA abc;
.
. // Some processing here
.
if (pArg)
(STRUCTA *)pArg = abc;
}
问题是,这段代码抛出了以下警告:
警告:任务目标不是真正的左值;这将是一个很难的错误
如果没有演员,我会再次发出警告,我正试图取消引用无效指针......
由于警告被视为错误,我无法使用此代码 - 但我真的不能使用任何其他指针类型而不是void *作为参数。是否有一个我缺少的优雅解决方案?
有没有办法让这项工作?
答案 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);
?