字串 strlen函式與sizeof的區別

2022-03-14 19:17:36 字數 1459 閱讀 6628

對於 strlen 和 sizeof,相信不少程式設計師會混淆其功能。雖然從表面上看它們都可以求字串的長度,但二者卻存在著許多不同之處及本質區別。

strlen 是乙個函式,它用來計算指定字串 str 的長度,但不包括結束字元(即 null 字元)。其原型如下面的**所示:

1 size_t strlen(char

const* str);

也正因為 strlen 是乙個函式,所以需要進行一次函式呼叫,呼叫示例如下面的**所示:

1

char sarr = "

ilovec";

2/*用strlen()求長度

*/3 printf("

sarr的長度=%d\n

", strlen(sarr));

很顯然,上面示例**的執行結果為 6(因為不包括結束字元 null)。這裡需要特別注意的是,函式 strlen 返回的是乙個型別為 size_t 的值,從而有可能讓程式導致意想不到的結果,如下面的示例**所示:

/*

判斷一*/

if(strlen(x)>=strlen(y))

/*判斷二

*/if(strlen(x)- strlen(y)>= 0

)

從表面上看,上面的兩個判斷表示式完全相等,但實際情況並非如此。其中,判斷表示式一沒什麼問題,程式也能夠完全按照預想的那樣工作;但判斷表示式二的結果就不一樣了,它將永遠是真,這是為什麼呢?

原因很簡單,因為函式 strlen 的返回結果是 size_t 型別(即無符號整型),而 size_t 型別絕不可能是負的。因此,語句「if(strlen(x)-strlen(y)>=0)」將永遠為真。

同樣,就算表示式中同時包含了有符號整數和無符號整數,還是有可能產生意想不到的結果,如下面的**所示:

1

/*判斷一*/2

if(strlen(x)>= 5)3

5/*判斷二*/

6if(strlen(x)- 5>=0)7

很顯然,判斷表示式二的結果還是永遠是真,其原因與上面相同。

關鍵字 sizeof 是乙個單目運算子,而不是乙個函式。與函式 strlen 不同,它的引數可以是陣列、指標

、型別、物件、函式等,如下面的示例**所示:

1

char sarr = "

ilovec";

2/*用sizeof求長度

*/3 printf("

sarr的長度=%d\n

", sizeof(sarr));

相對於函式 strlen,這裡的示例**執行結果為 7(因為它包括結束字元 null)。同時,對 sizeof 而言,因為緩衝區已經用已知字串進行了初始化,其長度是固定的,所以 sizeof 在編譯時計算緩衝區的長度。也正是由於在編譯時計算,因此 sizeof 不能用來返回動態分配的記憶體空間的大小。

PHP字串函式strlen 獲取字串長度

在php中,字串函式 strlen 用來獲取字串長度。函式語法 strlen string string int函式引數說明 引數 描述string 必需。規定要檢查的字串。strlen 用來獲取字串長度。成功則返回字串 string 的長度 如果 string 為空,則返回 0。舉例1,獲取字串長...

字串長度strlen

繼續回憶關於庫函式的部分實現,下面是strlen函式的實現,裡面也有乙個小問題,不知道有沒有意義 include intmystrlen const char psrc while psrc 0 printf nval d n nval return nval int main int argc,c...

PHP字串長度計算 strlen 函式

strlen 函式和mb strlen 函式 在php中,函式strlen 返回字串的長度。函式原型如下 int strlen string string input 引數string input為要處理的字串。strlen 函式返回字串所佔的位元組長度,乙個英文本母 數字 各種符號均佔乙個位元組,...