基本介紹
- 中文名:strncpy
- 屬於:庫函式
- 來自:C語言標準庫
- 適用:電腦編程
- 頭檔案: #include<string.h>
- 返回值:被複製後的*dest
格式,功能,功能講解,功能概括,區別,
格式
函式原型char *strncpy(char *dest,char *src,int size_t);
功能
功能講解
(c/c++)複製字元串src中的內容(字元,數字、漢字....)到字元串dest中,複製多少由size_t n的值決定。如果src的前n個字元不含NULL字元,則結果不會以NULL字元結束。如果n<src的長度,只是將src的前n個字元複製到dest的前n個字元,不自動添加'\0',也就是結果dest不包括'\0',需要再手動添加一個'\0'。如果src的長度小於n個位元組,則以NULL填充dest直到複製完n個位元組。src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字元長度+'\0'。舉例:
#include<stdio.h>#include<string.h>int main(){char name[]={"Chinanet"},dest[20]={};strncpy(dest,name,3);printf("%s\n",dest);}
1)src串長度<=dest串長度,(這裡的串長度包含串尾NULL字元)
如果n>src由於長度達到src NULL,正常複製,特別注意,如果src中有NULL,strncpy複製到NULL即使沒到n也提前停止。如果n = src串長度,與strcpy一致。注意n的選擇當n > dest串長度,dest棧空間溢出產生崩潰異常。
2)src串長度>dest串長度
如果n =dest串長度,則dest串沒有NULL字元,會導致輸出會有亂碼。如果不考慮src串複製完整性,可以將dest 最後一字元置為NULL。
綜上,一般情況下,使用strncpy時,建議將n置為dest串長度(除非你將多個src串都複製到dest數組,並且從dest尾部反向操作),複製完畢後,為保險起見,將dest串最後一字元置NULL,避免發生在第2)種情況下的輸出亂碼問題。當然嘍,無論是strcpy還是strncpy,保證dest串容量(能容納下src串)才是最重要的。
功能概括
簡而言之,就是把src指向的字元串的前size_t n個字元(不包括\0,\0得自己手動加在*dest被複製之後)複製到dest指向的字元串中。如果要複製的*src的部分有\0,就把\0複製進去,之後就提前結束,即使沒複製到第size_t n個字元也是。返回指向*dest的指針。
區別
strcpy只是複製字元串,但不限制複製的數量,很容易造成緩衝溢出。strncpy要安全一些。
strncpy能夠選擇一段字元輸出,strcpy則不能。例如:
char name[]="Chinanet",dest[20]={0};
strncpy(dest,name,9);
printf("%s\n",dest);
strncpy可實現strcpy的字元串複製:
char name[]="Chinanet",dest[20]={0};
strncpy(dest,name,sizeof(name));
printf("%s\n",dest);