转换 void* 缓冲区时无效使用 void 表达式

Invalid use of void expression when casting a void* buffer

我的函数需要一个 void* 缓冲区,并且必须用我的 char* buffer_rep 中的内容填充它。但是当我写这个时:

int function(void *buffer, int size)
{
   char buffer_rep[512];
   // my buffer_rep is filled up with the call of another function.
   // It is not empty
   for (int i = 0; i < size; i++) {   // size is below 512
       buffer[i] = buffer_rep[i]; 
   }
return 0;
}

for 表达式中的那一行给出了错误 "Invalid use of void expression"。如果我尝试像这样投射缓冲区:

(char *)buffer[i] = buffer_rep[i]; 

我收到了同样的错误并带有警告 "Invalid type conversion"。我还尝试使用 (char) 而不是 (char *)。 我在 C 方面没有太多经验,我尝试自己寻找解决方案,但通常人们在转换时不会遇到此错误。我假设有一些明显的东西我没有看到。

必须 转换指针,但转换的问题是您转换了元素 而不是指针。 IE。表达式 (char *)buffer[i] 等于 (char *)(buffer[i]).

如果你在正确的地方使用括号应该没问题:((char *)buffer)[i]

您必须将转换应用于 buffer 而不是 buffer[i]

将您的代码更改为

((char *)buffer) [i] = buffer_rep[i];