sizeof和strlen的區別

2021-10-05 21:07:46 字數 2946 閱讀 4943

sizeof和strlen經常被大家拿來作對比,但是他們之間的區別還是很大的。

一、定義不同:

sizeof是運算子,在標頭檔案中typedef為unsigned int,其值在編譯時即計算好了,引數可以是陣列、指標、型別、物件、函式等。

strlen是個函式,它的功能是:獲得保證能容納實現所建立的最大物件的位元組大小。

二、語法不同

strlen是函式,要在執行時才能計算。引數必須是字元型指標。當陣列名作為引數傳入時,實際上陣列就退化成指標了。它的功能是:返回字串的長度。該字串可能是自己定義的,也可能是記憶體中隨機的,該函式實際完成的功能是從代表該字串的第乙個位址開始遍歷,直到遇到結束符null。返回的長度大小不包括null。

sizeof引數比較多元化,它的功能是返回該變數空間的大小它會將null也算在

裡面。三、本質區別

sizeof是求資料型別所佔的空間大小

strlen是求字串的長度,字串以/0結尾

char arr1=

"abcd"

; cout <<

"sizeof(arr1):"

<<

sizeof

(arr1)

<< endl;

//---->5

cout <<

"strlen(arr1):"

<<

strlen

(arr1)

<< endl;

//---->4

//因為sizeof在計算arr1的時候將\0也計算在內

//這裡有一點一定要清楚,"abcd"是以\0結尾的

//在arr1的裡面放的是abcd\0這裡的\0當做資料也放在了陣列裡面

//而strlen在遇到\0的時候就不計算而退出函式了

const

char

* arr2 =

"abcdef"

; cout <<

"sizeof(*arr2):"

<<

sizeof

(arr2)

<< endl;

//---->4

cout <<

"strlen(*arr2):"

<<

strlen

(arr2)

<< endl;

//---->6

//sizeof的引數是乙個指標,在32位下,指標佔4個位元組

//所以sizeof的結果並不是字串的長度

//strlen計算的arr2指向的字串的長度,結果為6

int arr3=

; cout <<

"sizeof(arr3):"

<<

sizeof

(arr3)

<< endl;

//---->24

cout <<

"strlen(arr3):"

<<

strlen

(arr3)

<< endl;

//報錯

//sizeof計算的是arr3的空間,乙個int四個位元組,一共六個

//strlen的引數必須是字元指標,arr3是int的陣列,所以報錯

char arr4=

; cout <<

"sizeof(arr4):"

<<

sizeof

(arr4)

<< endl;

//---->5

cout <<

"strlen(arr4):"

<<

strlen

(arr4)

<< endl;

//---->不確定

//arr4在這裡使用strlen的時候查詢不到\0,所以就不知道會在什麼地方停止

char arr5[

3]=;

cout <<

"sizeof(arr4[3]):"

<<

sizeof

(arr5)

<< endl;

//---->6

cout <<

"strlen(arr4[3]):"

<<

strlen

(*arr5)

<< endl;

//---->4

//arr5裡面雖然只有四個資料,但是因為是二維陣列

//所以需要占用6個位置的空間,sizeof計算出來的就是6

//strlen計算的是陣列裡面資料的多少,返回值為4

//為了更好的證明strlen和sizeof的區別

//下面這個例子足以說明一切

char arr6=

; cout <<

"sizeof(arr6):"

<<

sizeof

(arr6)

<< endl;

//---->9

cout <<

"strlen(arr6):"

<<

strlen

(arr6)

<< endl;

//---->5

//sizeof遇到陣列中的'\0'並沒有停止往後走

//求出的是arr6一共占用的空間大小

//strlen在遇到'\0'的時候就停止往後走

//而直接返回乙個當前的數字當做陣列的長度了

sizeof還可以計算結構體的大小:

struct stu	;

stu stu;

cout <<

"sizeof(struct stu):"

<<

sizeof

(stu)

<< endl;

//---->12

//在結構體中,由於記憶體對齊的原因,所以結構體的大小為12

C語言strlen函式和sizeof的區別

c語言字串的兩種計算長度的方式,事實上兩者有許多不同,我們可以來 一下。sizeof sizeof 運算元所佔空間的位元組數大小 是一種c中的基本運算子。可以以型別 指標 陣列和函式等作為引數。頭檔案型別為unsigned int。運算值在編譯的時候就出結果,所以可以用來定義陣列維數。include...

突發奇想的strlen和sizeof的區別

一 sizeof sizeof 是運算子,在標頭檔案中typedef為unsigned int,其值在編譯時即計算好了,引數可以是陣列 指標 型別 物件 函式等。它的功能是 獲得保證能容納實現所建立的最大物件的位元組大小。由於在編譯時計算,因此sizeof不能用來返回動態分配的記憶體空間的大小。實際...

sizeof運算子和strlen函式的區別

1 sizeof是運算子,而strlen是函式。2 sizeof操作符的運算結果為size t,他在標頭檔案中的typedef為unsigned int。該型別保證能容納所操作物件的最大位元組大小。3 sizeof可以用型別做引數,而strlen只能用char 做引數,且必須是以 0 結尾。4 陣列...