sizeof與strlen函式的區別

2021-07-01 21:32:05 字數 1608 閱讀 4206

strlen

是函式,而sizeof是算符

strlen函式,用來求字串的長度,sizeof函式是用來求指定變數或變數型別(運算元)等所占用記憶體的大小且儲存大小由運算元的型別決定。

若運算元具有型別char、unsigned char或signed char,其結果等於1。

ansi c正式規定字元型別為1位元組。 其他型別:int(4)、unsigned int(4) 、short int(2)、unsigned short(2) 、longint(4) 、unsigned long(4)、float(4)、double(8)、longdouble(8)

當運算元是指標時,sizeof依賴於編譯器。例如microsoft c/c++7.0中,near類指標位元組數為2,far、huge類指標位元組數為4。一般unix的指標位元組數為4, 一般來說指標位元組數為4。

例1:

int*p;    int a[5];

p= a;

sizeof(p)的結果是4。

例2:const char*pstars=;

constint starcount=size of pstars/sizeof pstars[0];

sizeofpstars[0]的結果是4

當運算元具有陣列型別時,其結果是陣列的總位元組數。

例如:int a[12];    sizeof(a)的結果是12 * 4 = 48。

聯合型別運算元的sizeof是其最大位元組成員的位元組數。結構型別運算元的sizeof是這種型別物件的總位元組數,包括任何墊補在內。 

讓我們看如下結構:

struct a;

vc6.0結果為16

這是因為編譯器在考慮對齊問題時,在結構中插入空位以控制各成員物件的位址對齊。如double型別的結構成員x要放在被8整除的位址。

對於靜態陣列處理:

char str[20]="0123456789";

strlen(str)=10;   //表示陣列中字串的長度

sizeof(str)=20;   //表示陣列變數分配的長度

對於指標處理:

char *str="0123456789";

strlen(str)=10;     //表示字串的長度

sizeof(str)=4;      //表示指標變數的所佔記憶體大小

sizeof(*str)=1;     //表示'0'這個字元變數的所佔記憶體大小

對於陣列:

char x="string";

x[0]=0;    x[1]='\0';

計算:sizeof(x) = 7      strlen(x) =0    

宣告x的時候x裡面儲存的是"string\0",最後的\0是結束符,所以sizeof(x)就是7。

而\0的asccii碼值為0,strlen(x)是計算到\0位置,strlen(x)也就是0了

如果運算元是函式中的陣列形參或函式型別的形參,sizeof給出其指標的大小。

例如: 

void func(int*c)

void func(intc[13])

列印的都是4。

strlen函式以符號\0結束

聊聊strlen函式與sizeof的區別

對於 strlen 和 sizeof,雖然從表面上看它們都可以求字串的長度,但二者卻存在著許多不同之處及本質區別。strlen strlen 是乙個函式,它用來計算指定字串 str 的長度,但不包括結束字元 即 null 字元 其原型如下面的 所示 size t strlen char const ...

sizeof和strlen函式區別

sizeof 是運算子,在標頭檔案中typedef為unsigned int,其值在編譯時即計算好了,引數可以是陣列 指標 型別 物件 函式等。它的功能是 獲得保證能容納實現所建立的最大物件的位元組大小。由於在編譯時計算,因此sizeof不能用來返回動態分配的記憶體空間的大小。實際上,用sizeof...

sizeof 與 strlen 的區別

一 示例 eg1 下列 char buffer 256 char pbuffer buffer cout sizeof buffer cout sizeof pbuffer 其執行結果為 eg2 簡單說明 sizeof gives the amount of storage,in bytes,ass...