sizeof和strlen的區別

2021-10-05 20:13:23 字數 3476 閱讀 7129

表面上看它們都可以求字串的長度,但二者卻存在著許多不同之處及本質區別。

strlen

size_t strlen ( const char * str );

因為strlen返回值為無符號型別,優先順序高於有符號型別,和有符號型別進行運算時會進行型別轉換,所以strlen只能比較,不能參與運算,否則會造成不可預知的後果。

錯誤示例一:if(

strlen

(x)-

strlen

(y)>=0)

//最終結果會轉換為無符號型別,條件永為真。

錯誤示例二:if(

strlen

(x)-7)

>=0)

//最終結果會轉換為無符號型別,條件永為真。

正確示例一:if(

strlen

(x)>=

strlen

(y))

正確示例二:if(

strlen

(x)>=7)

sizeof

sizeof (型別說明符)   型別必須加括號,如果是變數名可以不加括號

sizeof 表示式

多說無益,做幾道小題練練手,加深理解:

char arr=

;printf

("%d\n"

,sizeof

(arr));

printf

("%d\n"

,sizeof

(arr+0)

);printf

("%d\n"

,sizeof

(*arr));

printf

("%d\n"

,sizeof

(arr[1]

));printf

("%d\n"

,sizeof

(&arr));

printf

("%d\n"

,sizeof

(&arr+1)

);printf

("%d\n"

,sizeof

(&arr[0]

+1))

;printf

("%d\n"

,strlen

(arr));

printf

("%d\n"

,strlen

(arr+0)

);printf

("%d\n"

,strlen

(*arr));

printf

("%d\n"

,strlen

(arr[1]

));printf

("%d\n"

,strlen

(&arr));

printf

("%d\n"

,strlen

(&arr+1)

);printf

("%d\n"

,strlen

(&arr[0]

+1))

;char arr=

"abcdef"

;printf

("%d\n"

,sizeof

(arr));

printf

("%d\n"

,sizeof

(arr+0)

);printf

("%d\n"

,sizeof

(*arr));

printf

("%d\n"

,sizeof

(arr[1]

));printf

("%d\n"

,sizeof

(&arr));

printf

("%d\n"

,sizeof

(&arr+1)

);printf

("%d\n"

,sizeof

(&arr[0]

+1))

;printf

("%d\n"

,strlen

(arr));

printf

("%d\n"

,strlen

(arr+0)

);printf

("%d\n"

,strlen

(*arr));

printf

("%d\n"

,strlen

(arr[1]

));printf

("%d\n"

,strlen

(&arr));

printf

("%d\n"

,strlen

(&arr+1)

);printf

("%d\n"

,strlen

(&arr[0]

+1))

;char

*p =

"abcdef"

;printf

("%d\n"

,sizeof

(p))

;printf

("%d\n"

,sizeof

(p+1))

;printf

("%d\n"

,sizeof

(*p));

printf

("%d\n"

,sizeof

(p[0])

);printf

("%d\n"

,sizeof

(&p));

printf

("%d\n"

,sizeof

(&p+1)

);printf

("%d\n"

,sizeof

(&p[0]

+1))

;printf

("%d\n"

,strlen

(p))

;printf

("%d\n"

,strlen

(p+1))

;printf

("%d\n"

,strlen

(*p));

printf

("%d\n"

,strlen

(p[0])

);printf

("%d\n"

,strlen

(&p));

printf

("%d\n"

,strlen

(&p+1)

);printf

("%d\n"

,strlen

(&p[0]

+1))

;

ps:想對答案的話,貼上到編譯器裡面執行一下(每天做一遍,防止抑鬱)。

越努力,越幸福!

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 陣列...