转换错误:左值作为赋值的左操作数需要左值

时间:2012-06-15 20:25:37

标签: c pointers casting lvalue

所以我正在尝试使用返回ether_aton()的{​​{1}} 我想把它放在struct ether_addr *(来自net / ethernet.h)的struct ether_header *eptr成员中。我试过这个:

ether_shost

这给了我 struct ether_header *eptr; /* net/ethernet.h */ ... (struct ether_addr*)(eptr->ether_shost) = ether_aton(SRC_ETHER_ADDR);

我知道我只是没有正确地投射它,但无法弄清楚如何。


编辑: 结束了它。谢谢你的帮助。

"Error: lvalue required as left operand of assignment"

只需要单独分配每个八位字节。

3 个答案:

答案 0 :(得分:5)

您不能在C中转换赋值运算符的左操作数。

答案 1 :(得分:3)

一张海报写道:“你不能在C中施放赋值算子的左操作数”

这是真的,但有一种情况并非如此:强制转换,然后取消引用指针:

 *((int *) chrPtrValue) = some_integer_expression;

在这种情况下,我们告诉编译器将chrPtrValue视为整数指针表达式,然后我们要求编译器取消引用它,以便我们可以在那里存储。

请注意,您可以通过这种方式执行一些时髦/危险的指针操作,例如:

  *((int *) 0xFEDBCA01) = 0;

只需提供一个文字常量值,就可以将零存储在任意位置!例如,疯狂,但如果您正在窥视和调用内存映射的I / O寄存器,则非常有用。

答案 2 :(得分:0)

更具体地说,你正在“施放”ether_shost(一个结构)。我认为你打算投下“eptr”。

这应该编译(但它没有意义和愚蠢):

(struct ether_addr*)(eptr)->ether_shost = ether_aton(SRC_ETHER_ADDR);