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