個人分類: 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 需要拷貝。寫出上面實現函式就不在話下。然而這樣的實現沒有考慮拷貝時記憶體重疊的情況,下面的測試...