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

所以我试图使用ether_aton()返回一个struct ether_addr *
我试图把它放在我的struct ether_header *eptr (来自net / ethernet.h)中,它有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"

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


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

 struct ether_addr* eth_addr = ether_aton(SRC_ETHER_ADDR); int i; for(i=0; iether_shost[i] = eth_addr->ether_addr_octet[i]; 

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

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

一张海报写道:“你不能在C中强制转换赋值运算符的左操作数”

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

  *((int *) chrPtrValue) = some_integer_expression; 

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

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

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

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

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

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

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