字串拷貝家族的歲月變遷

2021-08-22 10:20:22 字數 1702 閱讀 9851

一、strcpy:

char *_cdecl strcpy(char *_destination, const char *_source)

功能:將_source指向記憶體塊的內容複製到_destination指向的記憶體塊中。

隱患:strcpy函式的拷貝不保證安全性,有溢位風險。

思考函式返回值:直接呼叫strcpy(a,b)就可以把b字串內容拷貝給a指標指向的記憶體塊,無需a = strcpy(a,b),為何需要返回值?

解釋:本不要返回值,為增加靈活性如支援鏈式表達,可以附加返回值。

int length = strlen( strcpy( strdest, 「hello world」) );

返回值不僅可返回strdestination的指標,也可返回錯誤資訊。當該函式發生錯誤時,strdestination = strcpy()會破壞strdestination 。最好不要使用strdestination = strcpy()這種風格。

#includeusing namespace std;

#pragma warning(disable:4996) //因為vs2017強制使用strcpy_s

int main()

{ char s1 = "12345";

const char *s2 = "1234";

cout << strlen(strcpy(s1, s2))說明:strcpy(s1,s2)函式是把源串s2拷貝到目標串s1;同時把源串s2的 '\0' 拷貝過去;覆蓋了s1的所有字元。

將示例**稍作修改:

#includeusing namespace std;

#pragma warning(disable:4996) //因為vs2017強制使用strcpy_s

strcpy函式的拷貝不保證安全性,有溢位風險。

二、strncpy:

char *_cdecl strncpy(char *_destination, const char *_source, size_t count);

功能:將源串最多count個字元複製到目標陣列中,返回_destination的值(或者指向_destination的指標,大同小異)。最多的含義是考慮到源串可能沒有count個字元。

隱患:如果源串的長度大於count,則strncpy函式是不會複製最後的『\0』結束符的,這是不安全的;需要在複製完成後手動新增字串的結束符才行。

特點:

字串的淺拷貝

字串的淺拷貝 先來一道例題 includeint main for i 0 i 3 i 我們輸入的值為 aaa bbbbb cccc 我們希望的結果是 aaa bbbbb cccc 然而.執行結果卻是.這是為什麼呢o 這就引出了字串的淺拷貝問題啦 來乙個 大家就比較好理解整個過程啦,最後也會給出正確...

tieto字串拷貝

c實現記憶體拷貝以及字串拷貝函式 摘 收藏 i nclude i nclude i nclude void memmove kk void dest,const void src,size t count char strcpy kk char strdest,const char strsrc i...

字串拷貝函式

1.strcpy函式 顧名思義字串複製函式 一般函式原型實現方式 該函式的引數是字元指標,也就是可以是字串變數和字元陣列,因為它們的變數名代表首字元位址。字串預設有乙個null結束符,字元陣列沒有。所以此處需要注意 因為src要求有null結束符,所以字元陣列的長度必須大於等於src包含null結束...