1.1sizeof
sizeof是c/c++中的乙個長度運算子,優先順序為2
作用:是返回乙個物件或者型別在記憶體中所占用的位元組數。
1.2 strlen
strlen是c語言中的庫函式,所在標頭檔案為#include
原型:unsigned int strlen(char *str);其中str為指定的字串
功能:統計字串str中字元的個數(不包括 『\0』)
返回值:返回字元個數
1.strlen 測量的是字元的實際長度,以』\0』 結束,但不包括結束字元(\0或null)。而sizeof 測量的是字元的分配大小。
例:
char str[20] = "123456789";
int a = strlen(str); /*a = 9*/
int b = sizeof(str);/*b = 20*/
運算結果:
a的長度為9
b的長度為20
上面結果為a = 9,這是因為strlen計算的是字串的實際長度,以第乙個』\0』為結束符;b = 20,這是因為sizeof計算的是分配的陣列str[20]所佔的空間大小,不受裡面儲存內容的影響。
2.sizeof是編譯期就計算完成的,strlen是執行期計算的。
例:
char arr = "hello";
/*用sizeof求長度*/
printf("arr的sizeof長度=%d\n", sizeof(arr));
printf("arr的strlen長度=%d\n", strlen(arr));
運算結果:
arr的sizeof長度=6
arr的strlen長度=5
sizeof**執行結果為 6(因為它包括結束字元 null)。另外,因為緩衝區已經用已知字串進行了初始化,其長度是固定的,所以 sizeof 在編譯時計算緩衝區的長度。也正是由於在編譯時計算,因此 sizeof 不能用來返回動態分配的記憶體空間的大小。 sizeof求位元組以及與strlen的區別
例子一 根據以下條件進行計算 1 結構體的大小等於結構體內最大成員大小的整數倍 2 結構體內的成員的首位址相對於結構體首位址的偏移量是其型別大小的整數倍,比如說double型成員相對於結構體的首位址的位址 偏移量應該是8的倍數。include include using namespace std ...
C語言中的strlen與sizeof的區別
sizeof與strlen是有著本質的區別,sizeof是求資料型別所佔的空間大小,而strlen是求字串的長度,字串以 0結尾。區別如下 1 sizeof是乙個c語言中的乙個單目運算子,而strlen是乙個函式,用來計算字串的長度。2 sizeof求的是資料型別所佔空間的大小,而strlen是求字...
C語言中的strlen與sizeof的區別
sizeof與strlen是有著本質的區別,sizeof是求資料型別所佔的空間大小,而strlen是求字串的長度,字串以 0結尾。區別如下 1 sizeof是乙個c語言中的乙個單目運算子,而strlen是乙個函式,用來計算字串的長度。2 sizeof求的是資料型別所佔空間的大小,而strlen是求字...