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