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

Ala*_*ate 2 c pointers casting lvalue

所以我正在尝试使用ether_aton()哪个返回a 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);
Run Code Online (Sandbox Code Playgroud)

这给了我 "Error: lvalue required as left operand of assignment"

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


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

struct ether_addr* eth_addr = ether_aton(SRC_ETHER_ADDR);
int i;  
for(i=0; i<6; i++)
    eptr->ether_shost[i] = eth_addr->ether_addr_octet[i];
Run Code Online (Sandbox Code Playgroud)

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

oua*_*uah 5

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


JoG*_*sto 5

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

这在某种程度上是正确的,但有一种情况并非如此:强制转换,然后取消引用指针:

 *((int *) chrPtrValue) = some_integer_expression;
Run Code Online (Sandbox Code Playgroud)

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

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

  *((int *) 0xFEDBCA01) = 0;
Run Code Online (Sandbox Code Playgroud)

只需提供文字常量值即可将零存储在任意位置!例如,这很疯狂,但在您查看和查看内存映射 I/O 寄存器时很有用。