所以我正在尝试使用返回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"
只需要单独分配每个八位字节。
答案 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);