【问题标题】:error C2036: 'void *' : unknown size错误 C2036:'void *':未知大小
【发布时间】:2016-09-24 10:36:01
【问题描述】:

我正在使用 Visual Studio 处理一个 C 项目。我尝试编译以下代码:

void shuffle(void *arr, size_t n, size_t size)
{
        ....
        memcpy(arr+(i*size), swp,  size);
        ....  
}

Visual Studio 编译器出现以下错误:

error C2036: 'void *' : unknown size

代码用 GCC 编译得很好。如何解决这个错误?

【问题讨论】:

  • 但是你确定你是用C编译器编译的吗?
  • 是的,已删除。
  • 但是您不能索引 void 类型的指针。您可以尝试将其转换为 char 以便每个增量为一个字节
  • 因为编译器不知道void* 指针的大小,尽管可能存在允许它的GCC 扩展。要进行指针运算,您必须知道它指向的数据的大小。请注意,将 1 添加到指向 32 位 int 的指针会将 4 添加到指针本身。就像数组索引一样,您可以使用 arr[1] 而不是 arr[4] 访问第二个元素。
  • 感谢大家的有趣评论。

标签: c visual-studio void void-pointers


【解决方案1】:

您无法对 void * 执行指针运算,因为 void 没有定义的大小。

将指针投射到char *,它将按预期工作。

memcpy((char *)arr+(i*size), swp,  size);

【讨论】:

  • 谢谢,+1。非常有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-24
  • 2012-02-06
  • 2017-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多