表面上看它們都可以求字串的長度,但二者卻存在著許多不同之處及本質區別。
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 陣列...