sizeof 和strlen的區別

2022-08-04 07:24:08 字數 802 閱讀 6607

1. 編譯時計算運算子sizeof,可用型別或變數做引數,計算占用記憶體的大小。sizeof後若是型別必須加括弧,若是變數名可不加括弧。sizeof(x)可用來定義陣列維數。如:printf("%d\n", 

sizeof(short));輸出的結果為短整型的長度2。用結構型別或變數做引數時,sizeof 返回實際的大小,當用於靜態陣列時,sizeof 返回全部陣列的尺寸。sizeof 操作符不能返回動態地被分派了的陣列或外部的陣列的尺寸 

2. 執行時計算strlen,只能用char*做引數,且必須是以''\0''結尾的。計算的是字串的長度。如:char str[20]="0123456789"; int a=strlen(str); 結果為a=10; 而int b=sizeof(str); 結果b=20; 

3. 處理靜態陣列: 

char str[20]="0123456789"; 

int a=strlen(str); /*a=10; strlen 計算字串的長度,以\0'為字串結束標記。 

int b=sizeof(str); /*b=20;sizeof 計算的則是分配的陣列str[20] 所佔的記憶體空間的大小,不受裡面儲存的內容影響。 

4. 處理指標: 

char* ss = "0123456789"; 

sizeof(ss) 結果4,ss是指向字串常量的字元指標,sizeof 獲得的是乙個指標所佔的空間。sizeof(*ss) 結果1,*ss是第乙個字元 其實就是獲得了字串的第一位'0' 所佔的記憶體空間,是char型別的,占用1位元組。strlen(ss)= 10,若要獲得這個字串的長度,則一定要使用 strlen。

C語言strlen函式和sizeof的區別

c語言字串的兩種計算長度的方式,事實上兩者有許多不同,我們可以來 一下。sizeof sizeof 運算元所佔空間的位元組數大小 是一種c中的基本運算子。可以以型別 指標 陣列和函式等作為引數。頭檔案型別為unsigned int。運算值在編譯的時候就出結果,所以可以用來定義陣列維數。include...

突發奇想的strlen和sizeof的區別

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

sizeof運算子和strlen函式的區別

1 sizeof是運算子,而strlen是函式。2 sizeof操作符的運算結果為size t,他在標頭檔案中的typedef為unsigned int。該型別保證能容納所操作物件的最大位元組大小。3 sizeof可以用型別做引數,而strlen只能用char 做引數,且必須是以 0 結尾。4 陣列...