strcpy 和 strncpy的區別和實現

2021-06-21 15:08:40 字數 1158 閱讀 1471

首先下面是經典的strcpy 實現**:

#include

#include

#include

using namespace std;

char *mystrcpy(char* dest,const char * source)

int main()

;char b[3];

mystrcpy(b,a);

printf("%s",b);

return 0;

}注意的要點:mystrcpy函式要有的返回型別為char *型,作用為幫助以後進行左值呼叫。

使用assert庫函式確保源字串和目的字串都不為空。

接下來是strncpy的經典實現:

#include

#include

#include

#include

using namespace std;

char *mystrcpy(char* dest,const char * source,size_t size)

int main()

;char b[3];

mystrcpy(b,a,2);

cout}1.strcpy的隱患:

strcpy(char *to,const char *from);

該函式判斷'\0'作為結束條件,如果目標字串to的

空間不足

,則會

發生溢位

。這是乙個潛在的安全隱患,隨時有可能會出現錯誤。

2.strncopy的安全性:

strncpy(char *to,const char *from,int size);

strncpy通過size來控制複製的結束,這個size是源字串from的大小,這便保證了字元複製的安全性。這是一種強制性的安全措施,同樣它有似乎不可避免的會產生下面的問題:

1.strncpy不能保證目標字串to以'\0'結尾。

這種情況發生在源字串from長度大於目標字串to的長度。

2.源字串from較小,而目標字串to較大,將會用大量'\0'填充剩餘的空間。

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 ...

strncpy 和strcpy的區別

1.strcpy函式 顧名思義字串複製函式 原型 extern char strcpy char dest,char src 功能 把從src位址開始且含有null結束符的字串賦值到以dest開始的位址空間,返回dest 位址中儲存的為複製後的新值 要求 src和dest所指記憶體區域不可以重疊且d...