strcpy strncpy和memcpy的區別

2021-06-18 21:30:19 字數 1778 閱讀 3150

strcpy和

memcpy

都是標準

c庫函式,它們有下面的特點。

strcpy和

memcpy

主要有以下

3方面的區別。

1、複製的內容不同。

strcpy

只能複製字串,而

memcpy

可以複製任意內容,例如字元陣列、整型、結構體、類等。

2、複製的方法不同。

strcpy

不需要指定長度,它遇到被複製字元的串結束符

"\0"

才結束,所以容易溢位。

memcpy

則是根據其第

3個引數決定複製的長度。

3、用途不同。通常在複製字串時用

strcpy

,而需要複製其他型別資料時則一般用

memcpy

注意:

1. 該函式會連同字串的結束字元

'/0'

一起拷貝到字元陣列中,故字元陣列的長度應該至少是字串的長度加1。

例: char str = "123456";

這裡str

是乙個字元陣列,它存放了乙個字串

"123456"

,由於字串還有乙個結束符

"/0"

,所以此陣列的長度為

7而不是6。

char *str = "123456";  //該字串的長度為

6(字串以字元

'/0'

結尾,不計入字串長度)

char   dst[7];   //字元陣列的長度必須至少為字元長度加1,如

6+1=7

。strcpy(dst, str);

2. 該函式會拷貝字串的內容直至遇到第乙個字元值為

0的字元(第乙個字元值為

0的字元也會被拷貝),故如果乙個字串或字元陣列含

有大量的值為0

的資料,則不宜用該函式進行拷貝操作,可用

memcpy

函式。

char *strcpy(char * dest,const char * src)// 實現src到dest的複製

char *strdest = dest; //儲存目標字串的首位址

while ((*strdest++ = *strsrc++)!='\0');//把src字串的內容複製到dest下

return strdest;

}void *memcpy(void *memto,const void *memfrom,size_t size)

strncpy的實現如下

[c-sharp]view plaincopy

char *strncpy(char *dst, const char *src, size_t count)

return tmp;

}

該函式用於拷貝count個字元。

注意:

1. count一定要小於

dst的大小。

2.呼叫完該函式後一定要加上一句:

dst[count] = '/0'

;否則不安全,如

strlen

等函式要求引數必須是以

'/0'

結尾的字串。

因為當count

小於src

的大小時,

src的結束字元

'/0'

並不會被拷貝,故應該為

dst加上乙個結束符。

深入理解strcpy,strncpy

看到這樣乙個改錯題 charp 5 char s 12345 strcpy p,s cout p endl 錯誤之處是很顯然的,作為字串字面值的 12345 會在結尾處自動加上空字元null,從而長度是6,上面的strcpy是會越界的,從而是個越界錯誤。問題是我以為這樣的程式編譯的時候會出錯呢 但是...

C語言strcpy,strncpy的用法

在c語言中,字串複製函式有strcpy和strncpy,那麼這兩個函式有什麼區別呢,下面將詳細介紹。1.strcpy函式 字串複製函式。格式 char strcpy char str1,char str2 功能將str2指向的字串連同字串結束符完全複製到str1中。strcpy str1,hello...

最大m子段和

最大m子段和問題 給定由n個整數 可能為負 組成的序列a1 a2 a3.an,以及乙個正整數m,要求確定序列的m個不想交子段,使這m個子段的總和最大!設b i,j 表示陣列a的前j項中i個子段和的最大值,並且第i個子段包含a j 1 i m,i j n 則所求的最優值為maxb m,j m j n ...