簡體   English   中英

將結構深層復制到nesC中的結構數組(類似於C)

[英]Making a deep-copy of a struct to a struct array in nesC (similar to C)

我試圖尋找可以幫助我解決問題的答案,但我自己卻無法解決。 所以就到這里。 我正在與C相似的nesC中編程。

我正在嘗試在struct數組的特定位置內復制struct v。 結構v的定義如下:

struct ip_iovec v = {
  .iov_next = NULL,
  .iov_base = payload,
  .iov_len  = len,
};

ip_iovec定義為:

struct ip_iovec {
uint8_t         *iov_base;
size_t           iov_len;
struct ip_iovec *iov_next;
};

為此,我創建了一個相同類型的struct數組:

struct ip_iovec buffer_v[2]; 

現在,我想將v深拷貝到buffer_v數組的第二個位置。 為此,我試圖做

buffer_v[1] = v;
buffer_v[1].iov_next = v.iov_next;
buffer_v[1].iov_base = v.iov_base;
buffer_v[1].iov_len = v.iov_len;

並嘗試了

memcpy(&buffer_v[0], &v, sizeof(struct ip_iovec));

但是這些都不起作用。 另外,我想將值從位置1復制到數組中的位置0:

buffer_v[0] = buffer_v[1] (1)

並使用位置0的結構值:

value = &buffer_v[0] (2)

由於定義v的函數在執行(1)和(2)之后被調用,因此其值被重寫,這就是為什么我想對其進行深拷貝。 當我說上述操作無效時,我的意思是當v更改時,buffer_v [0]中的值也會更改,如果我要進行正確的深度復制,則不應該發生這種情況。

非常感謝您的幫助!

“工作”是什么意思? 您如何檢查?

要復制結構,只需使用賦值即可,無需花哨:

buffer_v[0] = v;

當然,如果v具有指針,並且您不想復制指針值,即復制點位於同一數據上,則還需要為新數據分配空間並將數據復制過來。 由於您沒有顯示struct ip_iovec的實際聲明,因此很難提供幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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