1.小白寫法
void my_strcpy(char* dest, char* src)
{
while (*src != '\0')
{
*dest = *src;
dest++;
src++;
}
*dest = *src;//'\0'拿過去
}
最大缺點:代碼臃腫;冗余
2.優化1
void my_strcpy(char* dest, char* src)
{
while (*dest++ = *src++);
//1.拷貝字符(包括'\0')
//2.遇到'\0'停止
}
最大缺點:在對dest,src指標解參考前未考慮其為空指標的情況(NULL)
3.優化2
void my_strcpy(char* dest, char* src)
{
assert(dest && src);
//當dest和src中有一個為空指標時程式便報錯
while (*dest++ = *src++);
//1.拷貝字符(包括'\0')
//2.遇到'\0'停止
}
最大缺點:萬一在模擬實作*dest=*src有人不小心將邏輯寫反了呢
4.優化3
void my_strcpy(char* dest,const char* src)
//適當在代碼中增加const,增加其健壯性
{
assert(dest && src);
while (*dest++ = *src++);
//1.拷貝字符(包括'\0')
//2.遇到'\0'停止
}
此時我們寫的strcpy已經很完美了,但是對比庫里的strcpy的引數型別以及回傳值,仍有不足:

故我們給出以下這個最終版本!!!
char* my_strcpy(char* dest,const char* src)
//適當在代碼中增加const,增加其健壯性
{
char* ret = dest;
assert(dest && src);
while (*dest++ = *src++);
//1.拷貝字符(包括'\0')
//2.遇到'\0'停止
return ret;
//我們將strcpy函式的回傳值設定為char*型別
//并且回傳的是目的地dest的地址
//這樣將來在main函式中便可以利用函式的回傳值直接列印目的地中的內容了
}
這便是我們模擬寫出的最完美的strcpy,
其功能及實作邏輯應該能與庫里的strcpy媲美!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/292230.html
標籤:其他
