sizeof與strlen的區別

2021-09-24 15:13:03 字數 1165 閱讀 1176

1、sizeof是c/c++中的乙個運算子,其作用是返回乙個物件或者型別在記憶體中所占用的位元組數。

注意:sizeof後面如果是型別則必須加括號,如 sizeof(char);而如果是變數名則可以不加括號,如 sizeof a; 但是建議使用時  均加上括號。sizeof不能返回動態地被分配的陣列的大小。

2、strlen是c語言中的庫函式,所在標頭檔案為#include 其函式原型為unsigned int strlen(char *s); 其中s為指定的字串。

注意:strlen只能用char *作為引數,它求的是字串的實際長度,方法是從開始到遇到第乙個'\0'結束。

3、sizeof是編譯期就計算完成的,strlen是執行期計算的。

例1:

char str[20] = "0123456789";

int a = strlen(str); /*a = 10*/

int b = sizeof(str);/*b = 20*/

上面結果為a = 10,這是因為strlen計算的是字串的實際長度,以第乙個'\0'為結束符;b = 20,這是因為sizeof計算的是分配的陣列str[20]所佔的空間大小,不受裡面儲存內容的影響。

例2:

char *ss = "0123456789";

int i = sizeof(ss); /*i = 4*/

int j = sizeof(*ss); /*j = 1*/

int k = strlen(ss); /*k = 10*/

上面結果為i = 4,這是因為sizeof獲得的是乙個指標的值所佔的位址空間,為long int型的,佔4個位元組;j = 1,這是因為 *ss 為第乙個字元 '0' 所以佔乙個位元組;k = 10,這是因為strlen所獲得的是此字串的實際長度,所以要想獲得此字串的長度,則一定要用strlen。

例3:

char buffer = "hello";

int m = strlen(buffer); /*m = 5*/

int n = sizeof(buffer); /*n = 6*/

上面結果為m = 5,這是因為strlen測量的是字串的實際長度,以遇到的第乙個'\0'為結束標誌;n = 6,這是因為字串以'\0'為結束標誌,'\0'也需要占用乙個位元組,所以sizeof測得的結果為6。 

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是求字...