Re: [問題] 關於memcpy的但書
看板C_and_CPP作者charleshu (Analog Engineer)時間15年前 (2010/07/11 06:02)推噓1(1推 0噓 4→)留言5則, 3人參與討論串2/2 (看更多)
※ 引述《timemaker (不拉屎就離開茅坑)》之銘言:
: 請問一下
: 假設memcpy的宣告如下:
: void * memcpy ( void * destination, const void * source, size_t num );
: 則memcpy有兩個但書:
: 1.To avoid overflows,
: the size of the arrays pointed by both the destination and source parameters,
: shall be at least num bytes,
: 2.and should not overlap.
: 第一個但書我們可以控制
: 但請問我們要如何確定第二個但書
: 也就是
: 如何確保這兩塊memory不會重疊到呢?
: 謝謝
memcpy會影響到的記憶體區間是 dest..dest+len, 與src..src+len, 這段區間有沒有重疊
應該不難判斷.
memmove功能上與memcpy一樣, 只是它會試情況決定從頭開始搬還是從尾巴開始搬.
memcpy假如搬移重疊的位置會有資料覆蓋的問題, 但它也可能對你的程式而言不是問題,
如LZ77解壓縮演算法時的搬移.
從前往後搬時覆蓋位於後面的目的地並不會有問題.
從後往前搬時,若後面的資料被覆蓋, 資料就遺失了, 而memmove會改成從最後一個byte開始
逆著搬,這樣資料就不會遺失了.
--
Do not depend on others without effort...
當我年輕時,請教別人問題時常聽到上面那句話. 當時心裏偶而會有些小小抱怨.
當時間過去,我偶而會想到上面那句話, 心中十分感謝當初告訴我那句話的人.
當發現問題時,最有價值的不是問題的答案,
而是找到解決的方向,並在努力的過程裡具備解決問題的能力.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.73.236.108
推
07/11 15:28, , 1F
07/11 15:28, 1F
→
07/11 15:29, , 2F
07/11 15:29, 2F
→
07/11 17:07, , 3F
07/11 17:07, 3F
→
07/11 17:17, , 4F
07/11 17:17, 4F
→
07/11 17:17, , 5F
07/11 17:17, 5F
討論串 (同標題文章)