strcpy函式的實現(注意記憶體重疊)

2021-09-01 11:54:17 字數 1021 閱讀 7633

個人分類: c/c++

[cpp]view plain

copy

char *my_strcpy(char *dst,const char *src)  

如果注意到:

1,檢查指標有效性;

2,返回目的指標des;

3,源字串的末尾 '\0' 需要拷貝。

寫出上面實現函式就不在話下。

然而這樣的實現沒有考慮拷貝時記憶體重疊的情況,下面的測試用例就能使呼叫my_strcp函式的程式崩潰:

[cpp]view plain

copy

char str[10]="abc";  

my_strcpy(str+1,str);    //執行結果:segmentation fault (core dumped)段錯誤,因為str+1<--str即

//str+1即str[1]='a'可行,當源目標指標str再使用str+1時,它的值就不是原來的'b'了,而是變成了目標位址的值'a'了,這不是程式設計師想要的結果。所以my_strcpy函式設計時就沒有考慮到這方面的內容(位址重疊dst>src且dst

然而呼叫系統的strcpy函式程式正常執行,列印str結果為「aabc」!可見系統strcpy函式的實現不是這樣的。

strcpy的正確實現應為:

[cpp]view plain

copy

char *my_strcpy(char *dst,const char *src)  

[cpp]view plain

copy

void * my_memcpy(void *dst,const void *src,unsigned int count)  

}  else                       //源位址和目的位址重疊,高位元組向低位元組拷貝  

}  return ret;  

}  兩者結合才是strcpy函式的真正實現吧。

strcpy 函式注意的地方

require user to enter name and handicap,if the name is exist,then return 1,or return 0.int setgolf golf g else strcpy g.fullname,temp.c str int score ...

strcpy函式的實現,考慮記憶體重疊情況

這裡貼出strcpy函式的簡單實現,其中考慮記憶體重疊情況的是函式是mystrcpy2,但是單傳遞記憶體重疊的實參的時候執行總是出錯,網上的 基本都是這樣實現的,不知道別人執行的時候有沒有出錯 include include include include 這種實現如果遇到記憶體重疊就會出錯,如my...

strcpy函式的實現

感謝分享!cpp view plain copy char my strcpy char dst,const char src 如果注意到 1,檢查指標有效性 2,返回目的指標des 3,源字串的末尾 0 需要拷貝。寫出上面實現函式就不在話下。然而這樣的實現沒有考慮拷貝時記憶體重疊的情況,下面的測試...