區別:memcpy和memmove()都是c語言中的庫函式,在標頭檔案string.h中,作用是拷貝一定長度的記憶體的內容,原型分別如下:
[cpp]
view plain
copy
print?
void
*memcpy(
void
*dst,
const
void
*src,
size_t
count);
void
*memmove(
void
*dst,
const
void
*src,
size_t
count);
他們的作用是一樣的,唯一的區別是,當記憶體發生區域性重疊的時候,memmove保證拷貝的結果是正確的,memcpy不保證拷貝的結果的正確。
一、memcpy函式
memcpy原型:
[cpp]
view plain
copy
print?
void
*memcpy(
void
*dest,
const
void
*src,
size_t
n);
描述:memcpy()函式從src記憶體中拷貝n個位元組到dest記憶體區域,但是源和目的的記憶體區域不能重疊。
返回值:
memcpy()函式返回指向dest的指標。
二、memmove函式
memmovey原型:
[cpp]
view plain
copy
print?
void
*memmove(
void
*dest,
const
void
*src,
size_t
n);
描述:memmove()
函式從src記憶體中拷貝n個位元組到dest記憶體區域,但是源和目的的記憶體可以重疊。
返回值:
memmove函式返回乙個指向dest的指標。
從上面的描述中可以看出兩者的唯一區別就是在對待重疊區域的時候,memmove可以正確的完成對應的拷貝,而memcpy不能。
記憶體覆蓋的情形有以下兩種,
先看memcpy()和memmove()這兩個函式的實現:
[cpp]
view plain
copy
print?
void
* my_memcpy(
void
* dst,
const
void
* src,
size_t
n)
return
dst;
} 從實現中可以看出memcpy()是從記憶體左側乙個位元組乙個位元組地將src中的內容拷貝到dest的記憶體中,這種實現方式導致了對於圖中第二種記憶體重疊情形下,最後兩個位元組的拷貝值明顯不是原先的值了,新的值是變成了src的最開始的2個位元組了。
而對於第一種記憶體覆蓋情況,memcpy的這種拷貝方式是可以的。
而memmove就是針對第二種記憶體覆蓋情形,對memcpy進行了改進,改進**如下:
[cpp]
view plain
copy
print?
void
* my_memmove(
void
* dst,
const
void
* src,
size_t
n)
}else
} return
dst;
} 區別:
memcpy和memmove()都是c語言中的庫函式,在標頭檔案string.h中,作用是拷貝一定長度的記憶體的內容,原型分別如下:
[cpp]view plain
copy
print?
void
*memcpy(
void
*dst,
const
void
*src,
size_t
count);
void
*memmove(
void
*dst,
const
void
*src,
size_t
count);
他們的作用是一樣的,唯一的區別是,當記憶體發生區域性重疊的時候,memmove保證拷貝的結果是正確的,memcpy不保證拷貝的結果的正確。
一、memcpy函式
memcpy原型:
[cpp]view plain
copy
print?
void
*memcpy(
void
*dest,
const
void
*src,
size_t
n);
描述:memcpy()函式從src記憶體中拷貝n個位元組到dest記憶體區域,但是源和目的的記憶體區域不能重疊。
返回值:
memcpy()函式返回指向dest的指標。
二、memmove函式
memmovey原型:
[cpp]view plain
copy
print?
void
*memmove(
void
*dest,
const
void
*src,
size_t
n);
描述:memmove()
函式從src記憶體中拷貝n個位元組到dest記憶體區域,但是源和目的的記憶體可以重疊。
返回值:
memmove函式返回乙個指向dest的指標。
從上面的描述中可以看出兩者的唯一區別就是在對待重疊區域的時候,memmove可以正確的完成對應的拷貝,而memcpy不能。
記憶體覆蓋的情形有以下兩種,
先看memcpy()和memmove()這兩個函式的實現:
[cpp]view plain
copy
print?
void
* my_memcpy(
void
* dst,
const
void
* src,
size_t
n)
return
dst;
}
從實現中可以看出memcpy()是從記憶體左側乙個位元組乙個位元組地將src中的內容拷貝到dest的記憶體中,這種實現方式導致了對於圖中第二種記憶體重疊情形下,最後兩個位元組的拷貝值明顯不是原先的值了,新的值是變成了src的最開始的2個位元組了。
而對於第一種記憶體覆蓋情況,memcpy的這種拷貝方式是可以的。
而memmove就是針對第二種記憶體覆蓋情形,對memcpy進行了改進,改進**如下:
[cpp]view plain
copy
print?
void
* my_memmove(
void
* dst,
const
void
* src,
size_t
n)
}else
} return
dst;
}
memmove 和 memcpy的區別
memcpy和memmove 都是c語言中的庫函式,在標頭檔案string.h中,作用是拷貝一定長度的記憶體的內容,原型分別如下 void memcpy void dst,const void src,size t count void memmove void dst,const void src...
memcpy和memmove的區別
memcpy和memmove的區別 memcpy 和memmove 都是c語言中的庫函式,在標頭檔案string.h中,其原型分別如下 void memcpy void dst,const void src,size t count void memmove void dst,const void ...
memcpy和memmove的區別
memcpy和memmove的區別 memcpy 和memmove 都是c語言中的庫函式,在標頭檔案string.h中,其原型分別如下 void memcpy void dst,const void src,size t count void memmove void dst,const void ...