sizeof和strlen 比較經典

2021-06-25 09:56:40 字數 746 閱讀 5287

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

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 獲取字串的長度 兩次失足後,我不在做這些無聊的嘗試了,仔細找找問...