strcpy函式和strncpy函式的區別

2021-09-06 10:58:56 字數 2402 閱讀 3755

strcpy函式和strncpy函式的原型介紹在我的另一篇文章中介紹了,見strcpy,strncpy,strlen等函式原型

strcpy:字串複製

原型: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擷取字串。

strncpy:字串複製

原型: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串長度]處存放src字串,(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串長度總結:這個函式會出現三種情況:

1、numsource串的長度(包含最後的'\0'字元):那麼該函式將會拷貝source的全部字元到destination串中(包括source串結尾的'\0'字元),並且在destination串的結尾繼續加上'\0'字元,直到拷貝的字元總個數等於num為止。

以下是乙個用strncpy()函式拷貝字串的一部分的例子:

[cpp]view plain

copy

#include

#include

int main()  

;  char dest_str2[40] = ;  

/* use strncpy() to copy only the first 11 characters. */

strncpy(dest_str1 , source_str , 11);  

printf("dest_str1 is now: %s \n" , dest_str1);  

/*now, use strncpy() to copy only the last 13 characters. */

strncpy(dest_str2, source_str + (strlen(source_str)-13) , 13);  

printf("dest_str2 is now: %s \n" ,dest_str2);  

return 0;  

}  

在上例中,第一次呼叫strncpy()函式時,它將源字串的頭11個字元拷貝到dest_str1中,這是一種相當直接的方法,你可能會經常用到。第二次呼叫strncpy()函式時,它將源字串的最後13個字元拷貝到dest_str2中,其實現過程為:

(1)用strlen()函式計算出source_str字串的長度,即strlen(source_str)。

(2)將source_str的長度減去13(13是將要拷貝的字元數),得出source_str中剩餘的字元數,即pstrlen(source_str)-13。

(3)將strlen(source_str)-13和source_str的位址相加,得出指向source_str中倒數第13個字元的位址的指標,即source_str+(strlen(source_str)-13)。這個指標就是strncpy()函式的第二個引數。

(4)在strncpy()函式的第三個引數中指定要拷貝的字元是13。

strcmp函式和strcpy函式

一 strcmp函式 strcmp函式是比較兩個字串的大小,返回比較的結果。一般形式是 i strcmp 字串1,字串2 其中,字串 字串 均可為字串常量或變數 i 是用於存放比較結果的整型變數。比較結果是這樣規定的 字串1小於字串2,strcmp函式返回乙個負值 字串1等於字串2,strcmp函式...

strcpy函式和strcat函式

將兩個char型別連線。char d 20 goldenglobal char s view strcat d,s 結果放在d中 printf s d 輸出 d 為 goldenglobalview 中間無空格 d和s所指記憶體區域不可以重疊且d必須有足夠的空間來容納s的字串。返回指向d的 指標。原...

strcpy函式 和 strstr函式

char my strcpy char dst,const char src 如果注意到 1,檢查指標有效性 2,返回目的指標des 3,源字串的末尾 0 需要拷貝。寫出上面實現函式就不在話下。然而這樣的實現沒有考慮拷貝時記憶體重疊的情況,下面的測試用例就能使呼叫my strcp函式的程式崩潰 cp...