strncpy

strncpy

C語言的庫函數
strncpy 是 C語言的庫函數之一,來自 C語言标準庫,定義于 string.h,char *strncpy(char *dest, char *src, int n),把src所指向的字符串中以src地址開始的前n個字節複制到dest所指的數組中,并返回dest。strncpy能夠選擇一段字符輸出,strcpy則不能。src和dest所指内存區域不可以重疊且dest必須有足夠的空間來容納src的字符長度+'\0'。當然喽,無論是strcpy還是strncpy,保證dest串容量(能容納下src串)才是最重要的。strcpy隻是複制字符串,但不限制複制的數量,很容易造成緩沖溢出。
    中文名:strncpy 外文名: 别名: 屬于:庫函數 來自:C語言标準庫 适用:電腦編程 頭文件:#include

格式

函數原型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);

上一篇:API函數

下一篇:十六進制

相關詞條

相關搜索

其它詞條