strcpy strcmp strcat 函式原型

2021-07-05 19:49:04 字數 2160 閱讀 3434

1、一般認為strcpy函式實現不是很難,流行的strcpy函式寫法是:

[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);  

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

strcpy的正確實現應為:

[cpp]view plain

copy

char

*my_strcpy(

char

*dst,

const

char

*src)    

memcpy函式實現時考慮到了記憶體重疊的情況,可以完成指定大小的記憶體拷貝,它的實現方式建議檢視文章「卓越的教練是如何訓練高手的?」,會獲益良多,這裡僅粘帖函式memcpy函式的實現:

[cpp]view plain

copy

void

* my_memcpy(

void

*dst,

const

void

*src,unsigned 

intcount)  

}  else

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

}  return

ret;  

}  

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

2.strcmp函式原型

intstrcmp(constchar*str1,constchar*str2)

return*str1 - *str2;

}

3.strcat函式原型

char*strcat(char* strdest ,constchar* strsrc)

while(*strdest++=*strsrc++)

//此處可以加語句*strdest=』\0』;無必要

returnaddress;//為了實現鏈式操作,將目的位址返回

}

原 linux select函式詳解

在linux中,我們可以使用select函式實現i o埠的復用,傳遞給 select函式的引數會告訴核心 我們所關心的檔案描述符 對每個描述符,我們所關心的狀態。我們是要想從乙個檔案描述符中讀或者寫,還是關注乙個描述符中是否出現異常 我們要等待多長時間。我們可以等待無限長的時間,等待固定的一段時間,...

原 PHP核心研究 函式的定義

宣告 本文為斯人原創,全部為作者一一分析得之,有不對的地方望賜教。php技術部落格 在csdn也會同步更新的哦.php中,函式的定義 是用關鍵字 function來定義的.function hello str 在 zend zend language parse.y中找到 關鍵字 t functio...

原 PHP核心函式研究之 global

宣告 本文為斯人原創,全部為作者一一分析得之,有不對的地方望賜教。好久沒有寫部落格了 最近事挺多,換了工作,又搬了家.今天就來說說 我們經常用到的global語句吧.我們都知道,在函式體內宣告的變數,作用域只是當前函式體中,一般情況下是訪問不到外部宣告的變數的.因為全域性變數和區域性變數存放在不同的...