linux中strcpy memcpy的用法與區別

2021-07-11 23:58:18 字數 1149 閱讀 1384

strcpy提供了字串的複製,以 \0 為結束標誌(即一旦遇到資料值為0的記憶體位址,拷貝過程即結束)。

函式原型如下:

char *strcpy(char *dest, const char *src);

其在核心(lib\string.h)源**的實現如下:

char *strcpy(char *dest, const char *src)

即最關鍵的一點是用到了如下的迴圈

while ((*dest++ = *src++) != '\0');

這就是為什麼用此複製字串是會出現異常終止的現象。也可以看出strcpy最終是給目的串的末尾賦了結束符'\0'的。

而memcpy是給定**和目標後,拷貝指定大小n的記憶體資料,而不管拷貝的內容是什麼,根據定義可知不僅限於字元之間的操作。

memcpy的原型為:

void *memcpy(void *dest, const void *src, size_t n);

其在核心原始碼中(lib/string.h)的實現如下:

void *memcpy(void *dest, const void *src, size_t count)

strcpy和memcpy主要有以下3個方面的區別。

1、複製的內容不同。

strcpy只能複製字串,而memcpy可以複製任意內容

,例如字元陣列、整型、結構體、類等。

2、複製的方法不同。

strcpy不需要指定長度,它遇到被複製字元的串結束符"\0"才結束,所以容易溢位。memcpy則是根據其第3個引數決定複製的長度。

3、用途不同。通常在複製字串時用strcpy,而需要複製其他型別資料時則一般用memcpy

不難看出,如果你用來複製字串,

memcpy複製的最後並沒有給目的字串dset賦結束符'\0'(由使用者的源字串長度和內容決定)。假如使用者源字串很長,而只需複製一段給目標dest串,因此如果使用者要列印複製的結果,那麼最後的一步操作就是給dest[count]='\0'。然而這時使用者的設定的目的串要足夠大,至少比count大1個字元用來存放結束符。如果不曉得這點的話,使用者編寫的程式也可能列印出來的是很長的字串或是末尾攜帶一些亂碼了。

Linux中許可權

當你在linux下用命令ll 或者ls la的時候會看到這些字眼,這些字眼表示為不同使用者組的許可權 r read就是讀許可權 數字4表示 w write就是寫許可權 數字2表示 x excute就是執行許可權 數字1表示 讀 寫 執行三項許可權可以用數字表示,就是r 4,w 2,x 1。所以,rw...

Linux中控制代碼

1.控制代碼就是乙個識別符號,只要獲得物件的控制代碼,我們就可以對物件進行任意的操作。2.控制代碼不一定是指標。作業系統用控制代碼可以找到一塊記憶體,這個控制代碼可能是識別符號,例如map的key,也可能是指標,看作業系統怎麼處理的了。fd算是在某種程度上替代控制代碼吧 linux 有相應機制,但沒...

Linux中的時鐘概念Linux中的時鐘概念

linux的時鐘中斷中涉及至二個全域性變數乙個是xtime,另乙個則是jiffies。有乙個與時間有關的時鐘 實時時鐘 rtc 這是乙個硬體時鐘,用來持久存放系統時間,系統關閉後靠主機板上的微型電池保持計時。系統啟動時,核心 通過讀取rtc來初始化wall time,並存放在xtime變數中,即xt...