函式原型
在Visual C++ 6.0或Dev-C++中,原型為
,其中size_t實際上是unsigned int,在VC6.0或Dev-C++中可以看到這樣的代碼:
頭檔案:string.h或cstring
格式:strlen (字元指針表達式)
功能:計算給定字元串的(unsigned int型)長度,不包括'\0'在內
說明:返回s的長度,不包括結束符NULL。
相關函式:
strlen | strlen | wcslen |
_tcsclen | strlen | _mbslen |
程式舉例
舉例1:(在 Dev-C++ 5.11中運行通過)
運行結果為:
區別sizeof
strlen(char*)函式求的是字元串的實際長度,它求得方法是從開始到遇到第一個'\0',如果你只定義沒有給它賦初值,這個結果是不定的,它會從aa首地址一直找下去,直到遇到'\0'停止。
樣例1
樣例2
樣例3
樣例4
⒈sizeof操作符的結果類型是size_t,它在頭檔案中typedef為unsigned int類型。
該類型保證能容納實現所建立的最大對象的位元組大小。
⒉sizeof是取位元組運算符(關鍵字),strlen是函式。
⒊sizeof可以用類型做參數,strlen只能用char*做參數,且必須是以'\0'結尾的。
sizeof還可以用函式做參數,比如:
⒋數組做sizeof的參數不退化,傳遞給strlen就退化為指針了。
⒌大部分編譯程式 在編譯的時候就把sizeof計算過了是類型或是變數的長度。這就是sizeof(x)可以用來定義數組維數的原因
6.strlen的結果要在運行的時候才能計算出來,是用來計算字元串的長度,不是類型占記憶體的大小。
7.sizeof後如果是類型必須加括弧,如果是變數名可以不加括弧。這是因為sizeof是個操作符不是個函式。
⒏當適用了於一個結構類型時或變數, sizeof 返回實際的大小,
當適用一靜態地空間數組, sizeof 歸還全部數組的尺寸。
⒐數組作為參數傳給函式時傳的是指針而不是數組,傳遞的是數組的首地址,
如:
在C++里參數傳遞數組永遠都是傳遞指向數組首元素的指針,編譯器不知道數組的大小
如果想在函式內知道數組的大小, 需要這樣做:
進入函式後用memcpy拷貝出來,長度由另一個形參傳進去
我們能常在用到 sizeof 和 strlen 的時候,通常是計算字元串數組的長度
看了上面的詳細解釋,發現兩者的使用還是有區別的,從這個例子可以看得很清楚:
•上面是對靜態數組處理的結果,如果是對指針,結果就不一樣了
•在使用strlen時,有一個很特別的情況,就是數組名到指針蛻變
———————————————————————————————————————————————
看完以上你是否很清楚sizeof和strlen的區別了呢?還不明白的話,我們看下面幾個例子:
第一個例子
第二個例子
第三個例子
自定義函式實現strlen() 函式的功能
下面幾種實現strlen函式的原始碼大家參考
例1
例2
例3
例4
例5
例6
以上各種實現的方式都是大同小異的,有的用的是變數,有的用的是指針。
其中,最後一個用的是遞歸的方式。其實,在實現庫函式的時候,是規定不可以
調用其他的庫函式的,這裡只是給大家一個方法,可以不用變數就可以實現strlen。