[英]Casting Error: lvalue required as left operand of assignment
所以我試圖使用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; i<6; i++)
eptr->ether_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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.