2013-10-31 64 views
0

我試圖尋找一個答案,可以幫助我解決我的問題,但我無法真正解決它自己。所以在這裏。我正在編程nesC這是類似於C.在nesC中創建一個結構體的深層拷貝到一個結構體數組(類似於C)

我想在結構數組的特定位置內結構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 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]中的值也會發生變化,如果我要做正確的深度拷貝,則不應該發生這種情況。

非常感謝您的幫助!

+0

這不是一個結構聲明,它是一個名爲'v'的變量的聲明和初始化。 – unwind

回答

0

你是什麼意思的「工作」?你如何檢查這個?

要複製的結構,只要使用分配,沒有花式需要:

buffer_v[0] = v; 
當然

,如果v具有指針,你不想複製指針值,即具有在複製點相同的數據,您需要爲新數據分配空間並複製數據。由於您沒有顯示struct ip_iovec的實際聲明,因此很難提供幫助。

+0

感謝您的意見。我只是將ip_iovec的定義添加到原始帖子中。當我說上述操作不起作用時,我的意思是當v發生變化時,buffer_v [0]中的值也會發生變化,如果我要做正確的deepcopy權限,應該發生這種情況? – jaraujo

相關問題