转换错误:左值作为赋值的左操作数需要左值
所以我试图使用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);