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