仰視原始碼,實現strlen

2021-07-03 22:25:59 字數 431 閱讀 8750

最近對於c++原始碼特別感興趣,讀原始碼,然後根據原始碼實現一遍,對我幫助蠻大的。下面給出我們天天用的strlen的實現:

size_t strlen1(const

char* str)

size_t strlen2(const

char* str)

雖然,實現很簡單,但是其中體現的是一種極致。size_t是無符號整型,為了相容系統而涉及。字串很短的時候可能二者不會有多少差別,但是當字串很長的時候,差別就非常明顯了,上面乙個需要額外自增n次求長度,下面實現卻只要一次即可。利用字元間的位址求長度,是我們要學到的。

此時,如果你看完就就算了,沒有任何疑慮的話,說明你和我一樣,並不極致,任何極端的情況都可能發生,所以,此時我們還要對原始碼產生懷疑。當字串長度超過了size_t所能表述的範圍怎麼辦?

庫函式strlen原始碼重現及注意問題

首先直接上原始碼 size t strlen const char str 可以看到strlen是利用乙個新的char 指標,一直向後遍歷,找到字串結尾的 0,的下乙個元素。然後計算距離。但是這裡注意一點 size t 其實是 unsigned int 型別的。所以比較兩個字串長度大小的時候不能使用...

vuex原始碼實現

let vue 自定義foreach迴圈 author suzhe datetime 2019 07 28t11 12 17 0800 param obj description param classback description const foreach obj,classback 格式化模...

extend 的實現原始碼 (原始碼學習1)

目標 extend console.log add 1,2 是怎麼實現可以將add函式掛在jquery後面?jquery v1.12.4 1 jquery.extend jquery.fn.extend function 4 i 1,5 length arguments.length,6 deep ...