簡體   English   中英

memcpy function 定義中緩沖區的重疊是什么意思?

[英]What does overlapping of buffer mean in memcpy function definition?

memcpy 的 function 定義如下 -

memcpy function 將 size 字節從 object 開始復制到 object 開始 at to。 如果兩個 arrays 往來重疊,則此 function 的行為未定義; 如果可能重疊,請改用 memmove。

arrays“to”和“from”重疊是什么意思? 我們什么時候說兩個數組重疊?

通常,我們認為在場景中有些東西是重疊的——“to”數組從地址 1000 開始,大小為 100,“from”數組從地址 1050 開始,大小為 100。

但這不可能發生,因為系統沒有為 1050 處的“from”數組分配 memory,因為“to”數組已經分配了 1000 到 1100 之間的位置。

這將是一個重疊:

char arr[10];
// Code that does something
memcpy(&arr[0], &arr[3], 5);

但這不會:

memcpy(&arr[0], &arr[3], 2);

如果您有兩個 char 指針pq並調用memcpy(p, q, size) ,則重疊意味着至少有一個字節同時屬於區間[p,p+size][q,q+size] 在上面的示例中,這些元素是arr[3]arr[4]

暫無
暫無

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

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