strcpy和strncpy用法和區別

2021-07-22 14:47:07 字數 1272 閱讀 3652

1. strcpy函式:顧名思義字串複製函式:原型:extern char *strcpy(char *dest,char *src); 功能:把從src位址開始且含有null結束符的字串賦值到以dest開始的位址空間,返回dest(位址中儲存的為複製後的新值)。要求:src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字串。

一般函式原型實現方式:

char * strcpy(char * strdest,const char * strsrc)

該函式的引數是字元指標,也就是可以是字串變數和字元陣列,因為它們的變數名代表首字元位址。字串預設有乙個null結束符,字元陣列沒有。所以此處需要注意:因為src要求有null結束符,所以字元陣列的長度必須大於等於src包含null結束符的總長度。例如,char* src="abcd"; char dest[5]; 這裡dest的長度就至少為5。

2. strncpy函式:多個n代表可以指定字元個數進行賦值。原型:char * strncpy(char *dest, char *src, size_tn);  功能:將字串src中最多n個字元複製到字元陣列dest中(它並不像strcpy一樣遇到null才停止複製,而是等湊夠n個字元才開始複製),返回指向dest的指標。要求:如果n > dest串長度,dest棧空間溢位產生崩潰異常。該函式注意的地方和strcpy類似,但是n值需特別注意,

1)src串長度<=dest串長度,(這裡的串長度包含串尾null字元)

如果n=(0, src串長度),src的前n個字元複製到dest中。但是由於沒有null字元,所以直接訪問dest串會發生棧溢位的異常情況。這時,一般建議採取memset將dest的全部元素用null填充,如:memset(dest,0,7)(7為從dest起始位址開始前7個位置填充null,dest可以為字元指標和陣列名)。注意:char* pc="abc"; char chs[5]; sizeof(pc)為4(包含null)(有些編譯器不行),sizeof(chs)為5。

如果n = src串長度,與strcpy一致。

如果n = dest串長度,[0,src串長度]處存放於desk字串,(src串長度, dest串長度]處存放null。

2)src串長度》dest串長度

如果n =dest串長度,則dest串沒有null字元,會導致輸出會有亂碼。如果不考慮src串複製完整性,可以將dest最後一字元置為null。

所以,一般把n設為dest(含null)的長度(除非將多個src複製到dest中)。當2)中n=dest串長度時,定義dest為字元陣列,因為這時沒有null字元拷貝。

strcpy和strncpy的區別

strcpy 原型 char strcpy char restrict s1,const char restrict s2 用法 include 功能 把s2所指由null結束的字串複製到s1所指的陣列中。說明 s1和s2所指記憶體區域不可以重疊且s1必須有足夠的空間來容納s2的字串。返回指向s1的...

strcpy和strncpy的區別

第一種情況 1 2 3 4 char p how are you char name 20 abcdefghijklmnopqrs strcpy name,p name改變為 how are you 正確!strncpy name,p,sizeof name name改變為 how are you ...

strcpy和strncpy函式實現

原型宣告 char strcpy char dest,const char src 標頭檔案 include 和 include 功能 把從src位址開始且含有null結束符的字串複製到以dest開始的位址空間 說明 src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字...