2011-03-15 269 views
2

我在緩衝區中有一個http請求的內容。 然後我定義了另一個與最後一個尺寸相同的緩衝區。 而我需要將緩衝區的內容複製到我的新緩衝區。 所以我需要的幫助是,我如何才能將一個緩衝區複製到另一個緩衝區。我試過memcpy但它不工作。將緩衝區內容複製到另一個緩衝區

void TrivialMediaPlayer::DeliverMediaData(
     int       streamId, 
     bool      bHasPriority, 
     ConstBufferSptr    pMediaData) 

我想要的是將pMediaData的內容複製到一個新的緩衝區。

BufferSptr buf1 (new Buffer (pMediaData->Size())); 

我想在buf1複製pMediaData

感謝

+1

的memcpy聽起來像你想要的東西 - 你可以發佈您的代碼的片段。 – Rob 2011-03-15 09:05:24

+1

@fammi:如果不知道緩衝區的類型,這是無法回答的。請向我們展示相關代碼(緩衝區的定義,應該複製的代碼)。 – 2011-03-15 09:06:45

+1

1.顯示您的代碼。 2.在你之前的問題中接受答案。 – fancyPants 2011-03-15 09:06:56

回答

4

我不確定你寫的從一個StringSptr複製到另一個的確切代碼。 但是,如果你想

memcpy((void*)buf1 , (void*)pMediaData , pMediaData.Size()); 

你必須確保你應該定義在BufferSptr類「空缺*」功能(好像你所撰寫的一類),以您的BufferSptr對象轉換爲實際的C指針,指向內部緩衝區的地址。
或者,使用一些顯式調用:

memcpy(buf1.data() , pMediaData.data() , pMediaData.Size()); 
+0

謝謝,是的緩衝區類被寫入...我會將它添加到原始文章中 – fammi 2011-03-15 09:56:54

0

問題不是C.

你確定你的緩衝區是不同的對象?

在C memcpy對象重疊時不「工作」。嘗試memmove而不是... memcpy應該在第一個工作。如果它真的沒有在你的代碼中的某個其他行發生錯誤。

另外顯示您的代碼