實現自己的字串拷貝函式Strcpy

2021-07-11 18:58:24 字數 996 閱讀 7889

strcpy是c語言的庫函式,用於完成字串的拷貝,很多筆試面試過程中要求我們自己實現這個函式。

字串拷貝本身並沒有太多技巧,可以利用最後的'\0'作為界限,用迴圈完成拷貝,**如下

char *strcpy(char *strdst, const char *strsrc)

//迴圈複製

while((*strdst++ = *strsrc++) != '\0');

return strdst;

}

但如果只出這樣的函式恐怕是不能得到工作的,因為這種複製函式有乙個「坑」,這在函式說明中也提到了,那就是如果字串記憶體有重疊複製就可能會失敗(前往後複製會失敗),而且可能不會出現任何異常!這種情況是程式設計過程中最恐怖的問題。所以便有了下面的改進版本

char *strcpy(char *strdst, const char *strsrc)

//複製到臨時字串

int len = strlen(strsrc)+1;

char *strtmp = new char[len];

if(strtmp == null)

char *ptmp = strtmp;//儲存首位址

while((*strtmp++ = *strsrc++) != '\0');

//複製到目標字串

strtmp = ptmp;//恢復起點

while((*strdst++ = *strtmp++) != '\0');

delete ptmp;

return strdst;

}

解決方法也很直接,就是用乙個臨時字串作為中間容器,以免發生錯誤的覆蓋情況。

其實記憶體複製函式memcpy()和memmove()的區別就是memcpy()沒有考慮到記憶體重疊,而memmove()考慮到了。所以我們可以把我們的函式分別命名為strcpy()和strmove()。

如何自己實現字串拷貝函式

一般寫法 char my strcpy char dst,const char src 可以看到很簡單,只需考慮三點。1,判斷源字串和目的字串是否為空 2,現將目的位址指標儲存起來,方便輸出 3,遍歷原位址和目的位址,乙個字元乙個字元的複製,包括末尾的 但是上面的實現有問題,沒有考慮到記憶體重合的情...

str 字串 常用內建函式

列舉了幾個重要的字串操作常用內建函式 1 s.replace old,new count 2 替換字串裡的字元,old為要被替換的,new為替換的 3 count為指定替換次數,不寫替換所有 45 s hello world 6 7print s.replace o d 8print s.repla...

字串拷貝函式

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