sizeof 和strlen 不得不說的故事

2021-09-30 12:23:12 字數 1038 閱讀 8239

sizeof()是判斷乙個物件或者乙個型別所佔記憶體位元組數的操作符。

//32bit

int a;

int b=

sizeof(a)//4byte

sizeof(b)//陣列物件,計算陣列元素所佔的總長度 4byte*2= 8byte

char *p0;

sizeof(p0)//4 byte

char *p1="tencent";

sizeof(p1);//4 byte p1是指標,指標佔4位元組

char p2="tencent";

sizeof(p2);//8byte p2是陣列物件,計算陣列所有元素佔記憶體的總長度,字串的\0也算在內

struct data

;

在結構體會忽略char a[0]的大小,因為根本沒有分配記憶體。

sizeof(data) = 4;

如果不在結構體當中, char a[0]會報錯。

函式原型:size_t strlen(const char *string);

功能:它從記憶體的某個位置(可以是字串開頭,中間某個位置,甚至是某個不確定的記憶體區域)開始掃瞄,直到碰到第乙個字串結束符』\0』為止,然後返回計數器值(長度不包含「\0」)。

char *p1 = "tencent";

strlen(p1);//7 byte,不包含\0

char p2="tencent";

strlen(p2);//7 byte

sizeof()計算傳入物件所佔記憶體的大小,而strlen()是從傳入物件處開始掃瞄直至第乙個等於』\0』處的計數截止。

對於字串型別來說:

1.傳入陣列型別,sizeof會計算陣列所有元素所佔記憶體的大小,

『\0』也計入在內。而傳入指標(指向字串)時,計算的是指標本身所在記憶體的大小。

2.對於strlen(),不管傳入陣列型別還是指標,只有內容相同,strlen()的結果都一樣。

sizeof和strlen和 countof的區別

運算子,計算引數所佔記憶體 int nnum2 strlen arr 是函式,求字元的個數,不包括 0 int nnum3 countof arr windows巨集 計算陣列的元素個數 cout nnum1 cout nnum2 cout nnum3 endl int arr1 20 nnum1 ...

sizeof和strlen的區別

sizeof與strlen的區別與聯絡 轉 1.sizeof操作符的結果型別是size t,它在標頭檔案中typedef為unsigned int型別。該型別保證能容納實現所建立的最大物件的位元組大小。2.sizeof是算符,strlen是函式。3.sizeof可以用型別做引數,strlen只能用c...

strlen和sizeof的區別

sizeof與strlen的區別與聯絡 轉 1.sizeof操作符的結果型別是size t,它在標頭檔案中typedef為unsigned int型別。該型別保證能容納實現所建立的最大物件的位元組大小。2.sizeof是算符,strlen是函式。3.sizeof可以用型別做引數,strlen只能用c...