strncpy的用法


strncpy 是 C語言的庫函數之一,來自 C語言標准庫,定義於 string.h,char *strncpy(char *dest, const char *src, int n),把src所指向的字符串中以src地址開始的前n個字節復制到dest所指的數組中,並返回dest。

格式

函數原型char*strncpy(char*dest,char*src,size_tn);

功能

(c/c++)復制字符串src中的內容(字符,數字、漢字....)到字符串dest中,復制多少由size_tn的值決定。如果src的前n個字符不含NULL字符,則結果不會以NULL字符結束。 如果n<src的長度,只是將src的前n個字符復制到dest的前n個字符,不自動添加'\0',也就是結果dest不包括'\0',需要再手動添加一個'\0'。如果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,3);
6 dest[3]='\0';//沒有會亂碼
7 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串)才是最重要的。
 
區別
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);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM