我的函数需要一个 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];