sizeof 與 strlen的區別

2021-06-12 21:53:56 字數 1635 閱讀 3770

1.sizeof

1.1 當使用了乙個結果型別或變數時,sizeof 返回實際的大小。當使用一靜態的空間資料時,sizeof返回全部陣列的尺寸。

sizeof操作符不能返回被動態分配的資料或外部的陣列的尺寸

1.2 大部分編譯程式在編譯的時候就把sizeof 計算過了,是型別或則變數的長度,所以sizeof(x)可以定義陣列的維數

char str[20];

int b=sizeof(str);

int a[b];

2.strlen

2.1. strlen的引數只能是 char *,且必須是以』\0『結尾的

2.2. strlen的結果要在執行的時候才能計算出來,用來計算字串的長度,而不是型別佔記憶體的大小

需要特別注意的是,函式 strlen 返回的是乙個型別為 size_t 的值,從而有可能讓程式導致意想不到的結果,如下面的示例**所示:

/*判斷一*/

if(strlen(x)>= strlen(y))

/*判斷二*/

if(strlen(x)- strlen(y)>= 0)

從表面上看,上面的兩個判斷表示式完全相等,但實際情況並非如此。其中,判斷表示式一沒什麼問題,程式也能夠完全按照預想的那樣工作;但判斷表示式二的結果就不一樣了,它將永遠是真,這是為什麼呢?

原因很簡單,因為函式 strlen 的返回結果是 size_t 型別(即無符號整型),而 size_t 型別絕不可能是負的。因此,語句「if(strlen(x)-strlen(y)>=0)」將永遠為真。

同樣,就算表示式中同時包含了有符號整數和無符號整數,還是有可能產生意想不到的結果,如下面的**所示:

/*判斷一*/

if(strlen(x)>= 5)

/*判斷二*/

if(strlen(x)- 5>=0)

很顯然,判斷表示式二的結果還是永遠是真,其原因與上面相同。

例子:char *q3 ="a\n";

sizeof(q3)為4,指標的大小就是乙個定值,就是4

strlen(q3) 為2

char ss1= "0123"

sizof(ss1) 為5,因為包含『\0『

strlen(ss1) 為4

char ss2=;

sizof(ss2) 為4

strlen(ss2) 為4

char ss3[100]="0123";

sizeof(ss3) 為100

strlen(ss3) 結果為4,它的內部是乙個迴圈計算字串的長度,直到』\0『為止

int ss4[100];

sizeof(ss4) 為400,因為int佔4個位元組

strlen(ss4) 錯誤,strlen的引數只能是 char *,且必須是以』\0『 結尾的

char str[20];

strlen(str) 得到的值錯誤,因為要 strlen 要以』\0『結尾

char str[2]="23";

strlen(str) 得到的值錯誤,因為要 strlen 要以』\0『結尾,這裡陣列定義太小了

sizeof 計算棧中分配的大小,其他區域是不會計算在內的

class a

sizeof(a1) 為4, 因為靜態變數存放在全域性資料區

sizeof求位元組以及與strlen的區別

例子一 根據以下條件進行計算 1 結構體的大小等於結構體內最大成員大小的整數倍 2 結構體內的成員的首位址相對於結構體首位址的偏移量是其型別大小的整數倍,比如說double型成員相對於結構體的首位址的位址 偏移量應該是8的倍數。include include using namespace std ...

C語言中的strlen與sizeof的區別

sizeof與strlen是有著本質的區別,sizeof是求資料型別所佔的空間大小,而strlen是求字串的長度,字串以 0結尾。區別如下 1 sizeof是乙個c語言中的乙個單目運算子,而strlen是乙個函式,用來計算字串的長度。2 sizeof求的是資料型別所佔空間的大小,而strlen是求字...

C語言中的strlen與sizeof的區別

sizeof與strlen是有著本質的區別,sizeof是求資料型別所佔的空間大小,而strlen是求字串的長度,字串以 0結尾。區別如下 1 sizeof是乙個c語言中的乙個單目運算子,而strlen是乙個函式,用來計算字串的長度。2 sizeof求的是資料型別所佔空間的大小,而strlen是求字...