strcpy與strncpy的區別

2022-09-02 15:45:29 字數 1930 閱讀 3267

原型:char *strcpy(char *dest, char *src);

功能:把src所指由'\0'結束的字串複製到dest所指的陣列中。

說明:src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字串。

返回指向dest的指標。

注意:當src串長度》dest串長度時,程式仍會將整個src串複製到dest區域,可是dest陣列已發生溢位。

因此會導致dest棧空間溢位以致產生崩潰異常。如果不考慮src串的完整性,可以把dest陣列最後一元素置為null,從dest串長度處插入null擷取字串。

原型:char * strncpy(char *dest, char *src, size_t n);

功能:將字串src中最多n個字元複製到字元陣列dest中(它並不像strcpy一樣遇到null才停止複製,而是等湊夠n個字元才開始複製),返回指向dest的指標。

說明:如果n > dest串長度,dest棧空間溢位產生崩潰異常。

否則:1)src串長度<=dest串長度,(這裡的串長度包含串尾null字元)

如果n=(0, src串長度),src的前n個字元複製到dest中。但是由於沒有null字元,所以直接訪問dest串會發生棧溢位的異常情況。

如果n = src串長度,與strcpy一致。

如果n = dest串長度,[0,src串長度]處存放於desk字串,(src串長度, dest串長度]處存放null。

2)src串長度》dest串長度

如果n =dest串長度,則dest串沒有null字元,會導致輸出會有亂碼。如果不考慮src串複製完整性,可以將dest最後一字元置為null。

綜上,一般情況下,使用strncpy時,建議將n置為dest串長度(除非你將多個src串都複製到dest陣列,並且從dest尾部反向操作),複製完畢後,為保險起見,將dest串最後一字元置null,避免發生在第2)種情況下的輸出亂碼問題。當然嘍,無論是strcpy還是strncpy,保證src串長度

strcpy和strncpy的區別- -

第一種情況:

char* p="how are you ?";

char name[20]="abcdefghijklmnopqrs";

strcpy(name,p); //name改變為"how are you ? "====>正確!

strncpy(name,p, sizeof(name));//name改變為"how are you ?" *****>正確!後續的字元將置為null

第二種情況:

char* p="how are you ?";

char name[10];

strcpy(name,p); //目標串長度小於源串,錯誤!

name[sizeof(name)-1]='\0'; //和上一步組合,彌補結果,但是這種做法並不可取,因為上一步出錯處理方式並不確定

strncpy(name,p,sizeof(name)); //源串長度大於指定拷貝的長度sizeof(name),注意在這種情況下不會自動在目標串後面加'\0'

name[sizeof(name)-1]='\0'; //和上一步組合,彌補結果

1

char * strncpy(char* dest, const

char* src, int

n)28   n -= dest -s;

29goto

zero_fill;30}

31last_chars:

32   n &= 3;33

if (n == 0)34

return

s;35

for(;;)

3645

zero_fill:

46while (n-- > 0

)47   dest[n] = '\0'

;48return

s;49   }

strncpy與strcpy的區別與注意事項

strncpy 是 c語言 的庫函式之一,來自 c語言標準庫,定義於 string.h char strncpy char dest,char src,int n 把src所指字串的前n個位元組複製到dest所指的陣列中,並返回指向dest的指標。strcpy只是複製字串,但不限制複製的數量,很容易...

strcpy和strncpy的區別

strcpy 原型 char strcpy char restrict s1,const char restrict s2 用法 include 功能 把s2所指由null結束的字串複製到s1所指的陣列中。說明 s1和s2所指記憶體區域不可以重疊且s1必須有足夠的空間來容納s2的字串。返回指向s1的...

strcpy和strncpy的區別

第一種情況 1 2 3 4 char p how are you char name 20 abcdefghijklmnopqrs strcpy name,p name改變為 how are you 正確!strncpy name,p,sizeof name name改變為 how are you ...