sizeof 初始的分配的空間大小,期中
sizeof(unsigned char) = 1;
sizeof(signed char) = 1;
sizeof(int) = 4;
sizeof(unsigned int) = 4;
sizeof(short int) = 2;
sizeof(unsigned short) = 2;
sizeof(long int) = 4;
sizeof(unsigned long) = 4;
sizeof(float) = 4;
sizeof(double) = 8;
sizeof(long double) = 12;
sizeof(char *)=4;
例如: char a[5];
int b[5];
sizeof(a) = 5;
sizeof(b) = 20;
strlen是該陣列的長度:如
(1)char * 指標
strlen(指標名)
如果引數是指標則計算該指標指向字串行的長度。(以』\0』 作為判斷標誌)例如:
定義char *p=「hello world」;strlen(p)=11,而 sizeof (p)=4。可以看到 strlen
計算的是指標指向的字串的長度而sizeof 計算的是指標本身所占用的記憶體空
間的大小。
(2)陣列
strlen(陣列名)
如果引數是陣列的話,實際傳遞的是乙個指標,strlen 會按照上面處理指標的模
式處理該陣列。
我們可以看下面的例子:
char a=」hh」;
strlen(a);
很顯然strlen 的結果是2。但是如果陣列是這樣賦值的呢?
char a=;
strlen(a);
那麼現在strlen(a )的結果又是多少呢?這個數就不一定了,原因是 strlen 會去
計算a 位址開始的字串的長度,由於前一種賦值方式會將hh以字 符串的形式
賦值給陣列會將字串結束符』\0』 一同賦值,這時strlen 就會檢查到結束符停止
計算,而第二種復值方式是以單個字元的形式賦值沒有結束 符』\0』, 這時我們用
sizeof 得到的結果是正常的,而用 strlen 由於找不到結束符,會繼續的計算直到
找到結束符為止。所以這個數是不確定.
例項2:
char a="hello";
char b=;
strlen(a),strlen(b)的值分別是多少?
前面分析過,strlen是求字串的長度,字串有個預設的結束符/0,這個結束符是在定義字串的時候系統自動加上去的,就像定義陣列a一樣。陣列a定義了乙個字串,陣列b定義了乙個字元陣列。因此,strlen(a)=5,而strlen(b)的長度就不確定的,因為strlen找不到結束符。
one example
#define path_tmp "12345"
static void test_sizeof_strlen()
the output result:
sizeof(msg)---4
strlen(msg)---5
sizeof(array)---6
strlen(array)---5
sizeof(path_tmp)---6
strlen(path_tmp)---5
char *c="abcdef";
char d="abcdef";
char e=;
printf("%d%d/n",sizeof(c),strlen(c));
printf("%d%d/n",sizeof(d),strlen(d));
printf("%d%d/n",sizeof(e),strlen(e));
輸出的結果是:
4 67 6
6 14
分析一下:
第一行定義c為乙個字元指標變數,指向常量字串,c裡面存放的是字串的首位址。
第二行定義d為乙個字元陣列,以字串的形式給這個字元陣列賦值。
第三行定義的也是個字元陣列,以單個元素的形式賦值。
當以字串賦值時,"abcdef",結尾自動加乙個"/0".
strlen(c)遇到/0就會結束,求的是字串的長度,為6.
sizeof(c)求的是型別空間大小,在前面說過,指標型所點的空間大小是4個位元組,系統位址匯流排長度為32位時。
strlen(d)也是一樣,字串賦值,自動新增/0,求字串的長度當然是6.
sizeof(d)是求這個陣列所佔空間的大小,即陣列所佔記憶體空間的位元組數,應該為7.
sizeof(e), 陣列e以單個元素賦值,沒有/0結束符,所以所佔空間的大小為6個位元組。
strlen(e),去找/0結尾的字串的長度,由於找不到/0,所以返回的值是乙個不確定的值。
c語言中陣列與sizeof
我以前的理解是 陣列名字就是指向陣列首元素的指標,然而用sizeof 運算元組名字,把我又弄得有些疑惑了。查了查資料,終於明白了。原來,陣列名字做形參時才被當作指標。而sizeof 並不是乙個函式,而是乙個單目運算子,所以sizeof 裡寫陣列名字,返回的就是陣列佔了多少位元組。例如 char a ...
C語言中sizeof與strlen區別
一.本質區別 sizeof 和 strlen 有本質上的區別。sizeof 是c 語言的一種單目運算子,如 等,並不是函式,sizeof 的優先順序為2 級,比 等3 級運算子優先順序高,sizeof 以位元組的形式給出運算元的儲存空間的大小。而strlen 是乙個函式,是由c 語言的標準庫提供的。...
c語言中的sizeof
一 sizeof的概念 sizeof是c語言的一種單目操作符,如c語言的其他操作符 等。它並不是函式。sizeof操作符以位元組形式給出了其運算元的儲存大小。運算元可以是乙個表示式或括在括號內的型別名。運算元的儲存大小由運算元的型別決定。二 sizeof的使用方法 1 用於資料型別 sizeof使用...