#ifndef null
#ifdef __cplusplus
#define null 0
#else
#define null ((void *)0)
#endif
#endif
strcpy函式:顧名思義字串複製函式;
原型:extern char *strcpy(char *dest,char *src);
要求:src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字串。
一般函式原型實現方式:
char * strcpy(char * strdest,const
char * strsrc)
該函式的引數是字元指標,也就是可以是字串變數和字元陣列,因為它們的變數名代表首字元位址。字串預設有乙個null結束符,字元陣列沒有。所以此處需要注意:因為src要求有null結束符,所以字元陣列的長度必須大於等於src包含null結束符的總長度。例如,char* src=」abcd」; char dest[5]; 這裡dest的長度就至少為5。
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字元拷貝。
C strcpy與strncpy的注意事項
strcpy的函式式為 strcpy dst,src 因為char陣列最後以 0 為結尾,所以需要注意的是如果strlen src strlen dst 時,則最後的 0 無法複製,則會導致出錯,即dst的大小至少要等於src的大小,保證strcpy能複製最後的 0 strncpy的函式式為 str...
memcpy strcpy和strncpy的簡介
在c的操作中,對陣列類資料進行批量賦值一般通過memcpy strcpy和strncpy這三種函式進行,這裡將為其進行介紹.這三者的區別在於strcpy和strncpy只能對字串的資料進行拷貝,無法用於拷貝中間含有null的資料。函式的標頭檔案 string.h 1.memcpy 函式名 void ...
strcpy和strncpy用法和區別
1.strcpy函式 顧名思義字串複製函式 原型 extern char strcpy char dest,char src 功能 把從src位址開始且含有null結束符的字串賦值到以dest開始的位址空間,返回dest 位址中儲存的為複製後的新值 要求 src和dest所指記憶體區域不可以重疊且d...