sizeof與strlen的區別
阿新 • • 發佈:2018-12-11
一、基本定義
1、sizeof是C/C++中的一個運算子,其作用是返回一個物件或者型別在記憶體中所佔用的位元組數。
注意:sizeof後面如果是型別則必須加括號,如 sizeof(char);而如果是變數名則可以不加括號,如 sizeof a; 但是建議使用時 均加上括號。sizeof不能返回動態地被分配的陣列的大小。
2、strlen是C語言中的庫函式,所在標頭檔案為#include <string.h>其函式原型為unsigned int strlen(char *s); 其中s為指定的字串。
注意:strlen只能用char *作為引數,它求的是字串的實際長度,方法是從開始到遇到第一個'\0'結束。
二、幾個例子
例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。 ------------------------------------------------The end------------------------------------------------------