我有 void 指针,我想对其进行指针运算。为此,我想将其转换为 char 指针。
( char * ) buf += current_size;
但是,当我这样做时,我收到以下错误:
error: lvalue required as left operand of assignment
我也尝试在整个左侧添加括号,但没有成功。为什么我会得到这个?
我有 void 指针,我想对其进行指针运算。为此,我想将其转换为 char 指针。
( char * ) buf += current_size;
但是,当我这样做时,我收到以下错误:
error: lvalue required as left operand of assignment
我也尝试在整个左侧添加括号,但没有成功。为什么我会得到这个?
您可以通过写出赋值运算符来避免警告:
buf = (char *)buf + current_size;
您收到警告的部分原因sizeof(void)
是未定义,您无法对void *
. 注意:GCC 有一个扩展,它将代码视为 if sizeof(void) == 1
,但这不在 C 标准中。
分配的 LHS 上的演员表对分配没有影响。
因为它是无效的,所以你不能这样做。如果你想实现这一点,要么
将 buf 声明为 char 指针;或使用临时变量:
char *tmp = buf; // note you don't need the casting, void * works with everything
tmp += current_size;
buf = tmp;
编辑:正如其他人还建议的那样,您甚至可以删除那个丑陋的 tmp:
buf = (char *)buf + current_size;