下面是網上的乙個比較經典的例子,分析一下:
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,所以返回的值是乙個不確定的值。
sizeof與strlen的比較(C )
本文主要介紹在c 語言中,sizeof 與 strlen 兩種用法的比較。下面通過 示例,更清晰地比較 sizeof 與 strlen 的用法和作用。示例 sizeof and strlen test1.cpp 如下 include include include using namespace s...
sizeof和strlen和 countof的區別
運算子,計算引數所佔記憶體 int nnum2 strlen arr 是函式,求字元的個數,不包括 0 int nnum3 countof arr windows巨集 計算陣列的元素個數 cout nnum1 cout nnum2 cout nnum3 endl int arr1 20 nnum1 ...
C語言sizeof 與 strlen的比較
今天看了個演算法的題目,說是要合併兩個有序陣列,按照有序的方式。看看以為很簡單的,想當然的就開始敲程式了,但是發現了很多小問題,這些都是基礎啊,突出的是sizeof 的問題。sizeof 獲取的是乙個型別的佔據位元組長度,strlen 獲取字串的長度 兩次失足後,我不在做這些無聊的嘗試了,仔細找找問...