C語言中的strlen與sizeof的區別

2021-06-20 21:19:08 字數 1819 閱讀 5402

sizeof與strlen是有著本質的區別,sizeof是求資料型別所佔的空間大小,而strlen是求字串的長度,字串以/0結尾。區別如下:

(1) sizeof是乙個c語言中的乙個單目運算子,而strlen是乙個函式,用來計算字串的長度。

(2)sizeof求的是資料型別所佔空間的大小,而strlen是求字串的長度

例項1:

printf("char=%d/n",sizeof(char));  //1

printf("char*=%d/n",sizeof(char*)); //4

printf("int=%d/n",sizeof(int)); //4

printf("int*=%d/n",sizeof(int*)); //4

printf("long=%d/n",sizeof(long)); //4

printf("long*=%d/n",sizeof(long*)); //4

printf("double=%d/n",sizeof(double)); //8

printf("double*=%d/n",sizeof(double*)); //4

可以看到,char佔1個位元組,int佔4個位元組,long點4個位元組,而double佔8個位元組。但 char*,int*,long*,double*都佔4個位元組的空間。

這是為什麼呢?

在c語言中,char,int,long,double這些基本資料型別的長度是由編譯器本身決定的。而char*,int*,long*,double*這些都是指標,回想一下,指標就是位址呀,所以裡面放的都是位址,而位址的長度當前是由位址匯流排的位數決定的,現在的計算機一般都是32位的位址匯流排,也就佔4個位元組。

例項2:

char a="hello";

char b=;

strlen(a),strlen(b)的值分別是多少?

前面分析過,strlen是求字串的長度,字串有個預設的結束符/0,這個結束符是在定義字串的時候系統自動加上去的,就像定義陣列a一樣。陣列a定義了乙個字串,陣列b定義了乙個字元陣列。因此,strlen(a)=5,而strlen(b)的長度就不確定的,因為strlen找不到結束符。

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

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與strlen區別

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 ...

C語言中sizeof與strlen區別

一.本質區別 sizeof 和 strlen 有本質上的區別。sizeof 是c 語言的一種單目運算子,如 等,並不是函式,sizeof 的優先順序為2 級,比 等3 級運算子優先順序高,sizeof 以位元組的形式給出運算元的儲存空間的大小。而strlen 是乙個函式,是由c 語言的標準庫提供的。...

C語言中strlen與sizeof的區別

求長度通常是strlen和sizeof 下面是他倆的區別幫助你知道 1.sizeof操作符的結果型別是size t,它在標頭檔案中typedef為unsigned int型別。該型別保證能容納實現所建立的最大物件的位元組大小。2.sizeof是算符,strlen是函式。3.sizeof可以用型別做引...