C语言 在强制转换 void* 缓冲区时无效地使用 void 表达式



我的函数需要一个 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 表达式中的行给我错误"无效使用无效表达式"。如果我尝试像这样强制转换缓冲区:

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

我收到相同的错误,并显示警告"无效的类型转换"。我也尝试用(字符(而不是(字符*(。 我在 C 方面没有太多经验,我尝试自己寻找解决方案,但通常人们在投射时不会收到此错误。我想有一些明显的东西我没有看到。

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

如果您在正确的位置使用括号,应该没问题:((char *)buffer)[i]

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

将代码更改为

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

最新更新