首頁 > 運維 > 安全 > 如何進行sizeof和strlen解析

如何進行sizeof和strlen解析

王林
發布: 2023-05-27 12:05:22
轉載
1308 人瀏覽過

1.strlen函數.

#strlen所作的只是一個計數器的工作,它從記憶體的某個位置(可以是字串開頭,中間某個位置,甚至是某個不確定的記憶體區域)開始掃描,直到碰到第一個字串結束符號 '\0'為止,然後回傳計數器值

2.sizeof運算子

sizeof()傳回的是變數宣告後所佔的記憶體數,不是實際長度,此外sizeof不是函數,只是一個操作符。

3.strlensizeof的差異

3.1 sizeof可以用型別做參數,strlen只能用char*做參數,而且必須是以''\0''結尾的。

3.2  sizeof也可以用函數做參數,例如:short f(); printf("%d\n", sizeof(f()));輸出的結果是sizeof (short),即2。

3.3  陣列做sizeof的參數不退化,傳給strlen就退化成指標了。

3.4  大部分編譯程式在編譯的時候就把sizeof計算過了是類型或是變數的長度這就是sizeof(x)可以用來定義數組維數的原因。

3.5  strlen的結果要在運作的時候才能計算出來,是用來計算字串的長度,而不是型別佔記憶體的大小。

3.6  sizeof後面如果是型別必須加括弧,如果是變數名稱可以不加括弧。這是因為sizeof是個操作符不是個函數。

4.舉例區別strlensizeof

##1.char str[20]="0123456789";

int a=strlen(str); //a=10; >>>> strlen 計算字串的長度,以結束符0x00 為字串結束。

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

2.

上面是靜態數組處理的結果,如果是對指針,結果就不一樣了

char* ss = "0123456789";

 

  sizeof(ss) 結果4 ===》ss是指向字串常數的字元指針,sizeof 獲得的是一個指針的之所佔的空間,應該是長整型的,所以是4

而sizeof(*ss) 結果1 ===》*ss是第一個字符,其實就是獲得了字符串的第一位'0' 所佔的記憶體空間,是char型別的,佔了1位元

strlen(ss)= 10 >>>> 如果要獲得這個字串的長度,則一定要使用strlen。 sizeof函數傳回其參數在記憶體中所佔用的位元組數,而strlen函數傳回參數所指向的字串中字元的個數。

3.在使用sizeof時,有一個很特別的情況,就是數組名稱到指標蛻變,char Array[3] = {'0'} ;   

sizeof(Array) == 3;   

char *p = Array;

 

  

strlen(p) =#strlen(p) =

#  

strlen(p) =

#  

strlen(p) =# = 1;//sizeof(p)結果為4   

在傳遞一個陣列名稱到一個函數中時,它會完全退化為一個指標

4. 記憶體補齊

class X

#{

##  int i;

  int j;

######  char k;############};##################################################################### ###X x;############cout<以上是如何進行sizeof和strlen解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板