strlen[C/C++語言函式]

strlen[C/C++語言函式]
strlen[C/C++語言函式]
更多義項 ▼ 收起列表 ▲

strlen所作的僅僅是一個計數器的工作,它從記憶體的某個位置(可以是字元串開頭,中間某個位置,甚至是某個不確定的記憶體區域)開始掃描,直到碰到第一個字元串結束符'\0'為止,然後返回計數器值(長度不包含'\0')。

基本信息

函式原型

在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。

熱門詞條

聯絡我們