sizeof和strlen 比較經典

下面是網上的一個比較經典的例子,分析一下:

 

char *c="abcdef";

char d[]="abcdef";

char e[]={'a','b','c','d','e','f'};

 

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 6

7 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,所以返回的值是一個不確定的值。

發佈了192 篇原創文章 · 獲贊 151 · 訪問量 97萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章