strcpy和strncpy函式的安全性分析

2021-09-28 23:15:39 字數 1180 閱讀 8222

兩者都是c/c++裡面的字串拷貝函式,不同的是後者多了乙個引數,此引數可以指定從源拷貝多長。

char* strcpy(char* strdest, const

char* strsrc)

char* strncpy(char* strdest, const

char* strsrc, int pos)

以上為兩者原型

下面開始介紹兩個的安全性。

strcpy函式: 如果引數 dest 所指的記憶體空間不夠大,可能會造成緩衝溢位(buffer overflow)的錯誤情況,在編寫程式時請特別留意,或者用strncpy()來取代。

strncpy函式:用來複製源字串的前n個字元,src 和 dest 所指的記憶體區域不能重疊,且 dest 必須有足夠的空間放置n個字元。

建議使用方式:

strncpy(dest, src, sizeof(dest)); // 重點在sizeof(dest)

dest[sizeof(dest)-1] =』\0』;

不要以為用了strcnpy就可以高枕無憂,strcnpy用不好一樣程式跑飛。

下面是strcnpy的總結:

如果目標長》指定長》源長,則將源長全部拷貝到目標長,自動加上』\0』

如果指定長《源長,則將源長中按指定長度拷貝到目標字串,不包括』\0』

如果指定長》目標長,執行時錯誤

可以使用memcpy代替,它與strcpy的區別就是memcpy可以拷貝任意型別的資料,strcpy只能拷貝字串型別。而且memcpy第三個引數保證了memcpy函式的安全性。

根據上面的分析,本人寫了兩個函式的各自實現,參考如下:

char* my_strcpy(char* strdest, const

char* strsrc)

char* my_strncpy(char* strdest, const

char* strsrc, int pos)

return strtemp;

}

努力提高可讀性與健壯性,能力有限啊,有錯誤的地方希望大家能提出來。

兩者都是c/c++裡面的字串拷貝函式,不同的是後者多了乙個引數,此引數可以指定從源拷貝多長。

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

strcpy和strncpy函式實現

原型宣告 char strcpy char dest,const char src 標頭檔案 include 和 include 功能 把從src位址開始且含有null結束符的字串複製到以dest開始的位址空間 說明 src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字...