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

发布于 2024-10-05 09:40:30 字数 374 浏览 7 评论 0原文

我有以下代码:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

渔村楼浪 2024-10-12 09:40:30

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

*(STRUCTA *)pArg = abc;

(STRUCTA *)pArg is of pointer type, while abc isn't. You need to dereference the pointer:

*(STRUCTA *)pArg = abc;
浮光之海 2024-10-12 09:40:30

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

而是这样做:

*((STRUCTA *)pArg) = abc;

You are assigning a STRUCTA to a pointer to STRUCTA.

Rather do:

*((STRUCTA *)pArg) = abc;
晨光如昨 2024-10-12 09:40:30

试试这个:

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

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

Try this:

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

However you must make sure that pArg points to sizeof(abc) bytes of allocated memory.

素染倾城色 2024-10-12 09:40:30

也许 pArg = (void *) abc; ?

编辑:

pArg = (void *) (&abc);

Maybe pArg = (void *) abc; ?

EDIT:

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文