C基礎 strlen與sizeof的區別 彙總

2021-09-29 19:57:28 字數 2650 閱讀 1575

關於 strlen 與 sizeof 的區別,我相信很多人都有所了解。以下我總結了幾點關於strlen 與 sizeof 的區別和注意事項。

strlen ()

sizeof()

函式運算子

計算字串長度

計算型別所佔記憶體大小

執行結束時才計算出

編譯階段計算

引數只能是char*

引數可以是型別也可以是char*

測量字元的實際長度(以\0結束)

測量字元實際分配的大小

(1) strlen 是函式 ,sizeof 是運算子。

(2) strlen 測量的是字元的實際長度,以』\0』 結束。而sizeof 測量的是字元分配空間的大小。比如:

char str[20]

="hello"

;printf

("strlen: %d\n"

,strlen

(str));

printf

("sizeof: %d\n"

,sizeof

(str)

);

結果顯示為:

strlen:

5sizeof:20

請按任意鍵繼續.

..

(3) 但是在子函式中,sizeof 會把從主函式中傳進來的字元陣列當作是指標來處理。指標的大小又是由機器來決定,而不是人為的來決定的。

#include

void

size_of

(char str)

//形參接收的是陣列首元素位址

intmain()

結果顯示為 sizeof:4

(4) 我們知道字元陣列的初始化一次性賦值,也可以逐個賦值。可以指定陣列的大小,也可以不指定陣列長度。

#include

#include

intmain()

;char str3=

;printf

("str1=%s\n"

,str1)

;printf

("str2=%s\n"

,str2)

;printf

("str3=%s\n"

,str3)

;printf

("str1 strlen:%d\n"

,strlen

(str1));

printf

("str2 strlen:%d\n"

,strlen

(str2));

printf

("str3 strlen:%d\n"

,strlen

(str3));

printf

("str1 sizeof:%d\n"

,sizeof

(str1));

printf

("str2 sizeof:%d\n"

,sizeof

(str2));

printf

("str3 sizeof:%d\n"

,sizeof

(str3));

return0;

}

結果顯示為:

str1=hello

str2=hello

str3=hello燙燙燙燙燙蘦ello

str1 strlen:

5 str2 strlen:

5 str3 strlen:

21//此處是隨機值

str1 sizeof:6

str2 sizeof:6

str3 sizeof:5

請按任意鍵繼續.

..

這是為什麼呢?

我們知道字串是以 『\0』 為結束標誌的,所以char str1[ ] = 「hello」 等價於char str2[ ] = 。strlen函式求的是字串的實際長度,它求得方法是從開始直到遇到第乙個』\0』。

如果只定義而沒有給它賦初值,這個結果是不定的,它會從首位址一直找下去,直到遇到』\0』停止。比如str3,初始化時沒有在字串結尾加\0,所以strlen(str3)計算所得的結果不是我們想要的結果。

因此我們要避免這種情況,在初始化的時候要記得加上\0,或者一次性賦初值。

(5)strlen的結果要在執行的時候才能計算出來,是用來計算字串的長度,不是型別佔記憶體的大小。而大部分編譯程式在編譯的時候就把sizeof計算過了是型別或是變數的長度。

(6) sizeof可以用型別做引數,strlen只能用 char* 做引數,且必須是以』\0』結尾的

char arr1=

"hello"

;printf

("%s\n"

,strlen

(arr1));

//這裡的arr1是首元素位址

printf

("%d\n"

,sizeof

(char))

;//1byte

sizeof與strlen的比較(C )

本文主要介紹在c 語言中,sizeof 與 strlen 兩種用法的比較。下面通過 示例,更清晰地比較 sizeof 與 strlen 的用法和作用。示例 sizeof and strlen test1.cpp 如下 include include include using namespace s...

C語言sizeof 與 strlen的比較

今天看了個演算法的題目,說是要合併兩個有序陣列,按照有序的方式。看看以為很簡單的,想當然的就開始敲程式了,但是發現了很多小問題,這些都是基礎啊,突出的是sizeof 的問題。sizeof 獲取的是乙個型別的佔據位元組長度,strlen 獲取字串的長度 兩次失足後,我不在做這些無聊的嘗試了,仔細找找問...

C 中sizeof與strlen的區別

1.strlen 是函式,strlen char 函式求的是字串的實際長度,直到遇到第乙個 0 然後就返回計數值,且不包括 0 函式的返回值值在執行時確定。引數是指標或字元陣列,當陣列名作為引數傳入時,實際上陣列就退化成指標了。2.sizeof 是操作符,不是函式,返回的是變數 宣告後所佔的記憶體數...