C函數篇(strncpy函數)

strncpyC語言的函數之一,來自 C語言標準庫,定義於 string.h,char *strncpy(char *destin, char *source, int maxlen),把src所指由NULL結束的字符串的前n個字節複製到dest所指的數組中

格式:

頭文件:#include<string.h>
 
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'。舉例:
1 #include<stdio.h>
2 #include<string.h>
3 int main()
4 { char name[]={"Chinanet"},dest[20]={};
5 strncpy(dest,name,9);
6 printf("%s\n",dest); }

1)src串長度<=dest串長度,(這裏的串長度包含串尾NULL字符)c++

若是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的區別

strcpy只是複製字符串,但不限制複製的數量。很容易形成緩衝溢出。strncpy要安全一些。
strncpy可以選擇一段字符輸出,strcpy則不能例如:
1 char name[]={"Chinanet"},dest[20]={};
2 strncpy(dest,name,9);
3 printf("%s\n",dest);
4 strncpy可實現strcpy的字符串複製:
5 char name[]={"Chinanet"},dest[20]={};
6 strncpy(dest,name,sizeof(name));
7 printf("%s\n",dest);
相關文章
相關標籤/搜索