在 C 中为非空 void* 指针赋值的正确方法应该是什么?
我有以下代码:
void funcA(void* pArg)
{
STRUCTA abc;
.
. // Some processing here
.
if (pArg)
(STRUCTA *)pArg = abc;
}
问题是,该代码抛出以下警告: 警告:赋值目标并不是真正的左值;这将是将来的一个硬错误
如果没有强制转换,我会收到另一个警告,提示我正在尝试取消引用 void 指针...
由于警告被视为错误,我无法使用此代码 - 但我实际上不能使用除 void* 之外的任何其他指针类型作为参数。我缺少一个优雅的解决方案吗?
有什么办法可以让这个工作吗?
I've the following code:
void funcA(void* pArg)
{
STRUCTA abc;
.
. // Some processing here
.
if (pArg)
(STRUCTA *)pArg = abc;
}
the problem is, this code is throwing up the following warning:
warning: target of assignment not really an lvalue; this will be a hard error in the future
Without the cast, I'll get another warning that I'm trying to dereference a void pointer...
As warnings are being treated as errors, I can't use this code - But I really can't use any other pointer type than void* as the argument. Is there an elegant solution I'm missing?
Is there any way to make this work?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
(STRUCTA *)pArg
是指针类型,而abc
不是。您需要取消引用指针:(STRUCTA *)pArg
is of pointer type, whileabc
isn't. You need to dereference the pointer:您正在将
STRUCTA
分配给指向STRUCTA
的指针。而是这样做:
You are assigning a
STRUCTA
to a pointer toSTRUCTA
.Rather do:
试试这个:
但是您必须确保 pArg 指向已分配内存的 sizeof(abc) 字节。
Try this:
However you must make sure that pArg points to sizeof(abc) bytes of allocated memory.
也许 pArg = (void *) abc; ?
编辑:
pArg = (void *) (&abc);
?Maybe
pArg = (void *) abc;
?EDIT:
pArg = (void *) (&abc);
?