在日常的程式設計學習中,strlen與strcpy一直是我們使用比較頻繁的兩個函式,今天我們就通過模擬實現這兩個函式,來加深對於這兩個函式的理解
首先我們來看一看這兩個函式實現所需要具備的功能:
一、strlen()
是c標準庫中的字串函式,要在執行時才能計算。引數必須是字元型指標(char*), 且必須是以』\0』結尾的。它的功能是:返回字串的長度。該字串可能是自己定義的,也可能是記憶體中隨機的,該函式實際完成的功能是從代表該字串的第乙個位址開始遍歷,直到遇到結束符』\0』。返回的長度大小不包括』\0』。二、strcpy()
字串拷貝。將src指向的字串拷貝到dest,字串以』\0』結束。c語言標準庫函式strcpy,把從src位址開始且含有』\0』結束符的字串複製到以dst開始的位址空間。把從src位址開始且含有null結束符的字串複製到以dest開始的位址空間;src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字串。返回指向dest的指標。那麼如何根據這些功能來模擬實現函式呢?
首先是strlen函式,這裡我們使用了兩種方法來模擬實現即普通方法「my_strlen」與遞迴實現「strlen_recursive」
在這裡我將它們寫入乙個函式方便對比:
#include
#include
intmy_strlen
(char
const
* str)
//普通實現
return count;
}int
strlen_recursive
(const
char
* str)
//遞迴實現
intmain()
注意,在這裡我們使用了乙個函式assert,這個函式的作用是對一些我們規定的條件進行斷言,若在含有assert的程式塊執行時不符合assert的定義,則不執行此函式,程式報錯,並反饋出錯誤所在的位置以及錯誤型別,著極大的方便了程式後期的除錯過程。其次是strcpy函式,不多說,先上**:
#include
#include
char
*my_strcpy
(const
char
*scr,
char
*dest)
return dest_start;
}int
main()
裡儲存的位址已經變成了arr2的內容
函式型別設定為char是為了方便鏈式訪問。
模擬實現str函式
字串是乙個重要的資料型別,但是c語言並沒有顯式的字串資料型別,因為字串以字元常量的形式儲存在字元陣列之中。接下來我將要模擬實現處理字串的庫函式 strlen,syrcpy,strcat,strstr,strcmp,memcpy。1 strlen返回乙個int型的資料,是乙個測試字串長度的函式。這是自...
模擬實現strlen函式
題目 模擬實現strlen函式 非遞迴方式 主要是借助計數器的方式,利用指標移動乙個乙個數字符個數,直到遇到末尾的 0截止 define crt secure no warnings 1 include include include 非遞迴實現strlen int strlen const cha...
C語言 模擬實現strlen函式
編寫乙個c語言程式模擬實現strlen函式.strlen函式功能是計算字串中字元的個數.除 0外 而字串本身就是乙個字元陣列,只不過末尾以 0結束.因此,我們只需遍歷除 0之外的所有字元即可.有三種方法可以解決這個問題.方法一 設定乙個整型計數器,遍歷字串.方法二 通過不斷函式自身的遞迴.方法三 與...