如何在没有强制转换的情况下取消引用void变量

时间:2016-03-07 22:28:06

标签: c

typedef void *STACK_ENTRY;

STACK_ENTRY *create_stack_entry(void *value) {
    STACK_ENTRY *entry = malloc(sizeof(*value));
    *entry = *value;
    return entry;
}

我尝试创建一个通用函数来创建一个应该能够拥有任何类型的STACK_ENTRY。所以我使用void指针作为参数。我使用值类型的大小分配内存,然后我想将值赋给STACK_ENTRY的指针。

但是我收到以下错误:

prog.c:34:9: error: void value not ignored as it ought to be
  *entry = *value;
         ^

我该如何解决?

1 个答案:

答案 0 :(得分:4)

代码需要应对大小。调用create_stack_entry()时传递大小。不需要演员表。

 // STACK_ENTRY *create_stack_entry(void *value)
 STACK_ENTRY *create_stack_entry(void *value, size_t size) {
   STACK_ENTRY *entry = malloc(size);
   if (entry) memcpy(entry, value, size);
   return entry;
 }