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

标签 c pointers casting compiler-warnings void-pointers

我有以下代码:

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

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

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

如果没有强制转换,我将收到另一个警告,提示我正在尝试取消引用一个空指针...

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

有什么方法可以让它工作吗?

最佳答案

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

*(STRUCTA *)pArg = abc;

关于c - 在 C 中为非空 void* 指针赋值的正确方法应该是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4343701/

相关文章:

c - 打印堆的所有叶子

java - 转换原始数据类型

从 C 脚本调用 Perl 脚本,对文本文件进行排序

c - 如何有效地阻塞线程直到满足特定条件

c - 使用 fork、execvp 传输两个命令,然后将输出重定向到套接字

c - C中的指针,不明白他们是如何得到这个结果的

c - 双向链表工作不正常

python - 将包含逗号分隔值的字符串转换为整数

java - java中double到Float类转换的差异

c - 如何从 GtkFileChooserDialog 获取选择的文件?