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 ...