格式
函數原型char*strncpy(char*dest,char*src,size_tn);
功能
(c/c++)複制字符串src中的内容(字符,數字、漢字....)到字符串dest中,複制多少由size_tn的值決定。如果src的前n個字節不含NULL字符,則結果不會以NULL字符結束。如果src的長度小于n個字節,則以NULL填充dest直到複制完n個字節。src和dest所指内存區域不可以重疊且dest必須有足夠的空間來容納src的字符長度+'0'。舉例:
#include
#include
int main()
{ char name[]={"Chinanet"},dest={};
strncpy(dest,name,9);
printf("%sn",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串)才是最重要的。
區别
strcpy隻是複制字符串,但不限制複制的數量,很容易造成緩沖溢出。strncpy要安全一些。
strncpy能夠選擇一段字符輸出,strcpy則不能。例如:
char name[]={"Chinanet"},dest={};
strncpy(dest,name,9);
printf("%sn",dest);
strncpy可實現strcpy的字符串複制:
char name[]={"Chinanet"},dest={};
strncpy(dest,name,sizeof(name));
printf("%sn",dest);



















