簡體   English   中英

轉換錯誤:左值作為賦值的左操作數需要左值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM