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