memcpy與strcpy區別

memcpy與strcpy都是拷貝某段數據的函數庫,是C語言自帶標準函數庫,位於:”string.h”頭文件中,在一些字符串處理有很大幫助。很多人可能對一個數組的值賦給另一個數組時,估計都會採用一個for循環,對每個數組元素依次賦值。但如果使用數據拷貝函數,就可以一步到位。既然兩者都是拷貝數據,但有何不同之處呢?


memcpy函數

函數原型void *memcpy( void *dest, const void *src, size_t count );

參數意義:
dest:目的地址的首地址,即要把指定的數據複製到這個目的地址之下。
src:源數據首地址,要複製的指定的數首地址。
count :要複製的內存長度
返回值:函數返回一個指向dest的指針。

因此,memcpy是將某段內存數據src直接拷貝到dest,其長度和count 有關。

strcpy函數

函數原型 char * strcpy(char * dest, const char * src);

參數意義:
dest:複製到目標字符串的的首地址。
src:被複制源字符串的的首地址。
返回值:函數返回一個指向dest的指針。

因此,strcpy函數是將一個字符串內容複製到另一個字符串中,因爲沒有指定長度,當複製到‘\0’結束符時自動終止複製。

區別分析

  1. 從形參可以看出memcpy是void 型,因此可以拷貝任何形式的內存數據,是直接作用在內存地址上的數進行拷貝的,包括結構體,類都能拷貝。而strcpy形參是char 型,所以只能拷貝字符串內容。
  2. 從長度上看,memcpy爲指定長度複製,strcpy爲複製到‘\0’結束符自動停止。
  3. 功能上看,strcpy能做的,memcpy都能做到,有包含的關係。但一般用於字符串處理時,還是用strcpy多一些。

一些注意:使用時應避免內存地址溢出的發生,注意數據長度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章