strncpy

strncpy

strncpy函式用於將指定長度的字元串複製到字元數組中,是 C語言的庫函式之一,來自 C語言標準庫,定義於 string.h。語法形式為:char *strncpy(char *dest, const char *src, int n),表示把src所指向的字元串中以src地址開始的前n個位元組複製到dest所指的數組中,並返回被複製後的dest。

基本介紹

  • 中文名:strncpy
  • 外文名:strncpy
  • 屬於:庫函式
  • 來自:C語言標準庫
  • 適用:電腦編程
  • 頭檔案:string.h
  • 功能:串拷貝
strncpy基本格式,語法,參數,功能,功能講解,功能概括,區別,

strncpy基本格式

語法

char *strncpy(char *destinin, char *source, int maxlen);

參數

destinin:表示複製的目標字元數組;
source:表示複製的源字元數組;
maxlen:表示複製的字元串長度。

功能

功能講解

(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'。舉例:
#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串)才是最重要的。

功能概括

簡而言之,就是把source指向的字元串的前size_t n個字元(不包括\0,\0得自己手動加在*destin被複製之後)複製到destin指向的字元串中。如果要複製的*source的部分有\0,就把\0複製進去,之後就提前結束,即使沒複製到第size_t n個字元也是。返回指向*destin的指針。

區別

strcpy只是複製字元串,但不限制複製的數量,很容易造成緩衝溢出。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);

相關詞條

熱門詞條

聯絡我們