日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sizeof和strlen解析

發布時間:2025/7/14 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sizeof和strlen解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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) == 1;//sizeof(p)結果為4   

在傳遞一個數組名到一個函數中時,它會完全退化為一個指針

?

4.?內存補齊

class X

{

  int i;

  int j;

  char k;

};

X x;

cout<<sizeof(X)<<endl; 結果 12 ===》內存補齊

cout<<sizeof(x)<<endl; 結果 12 同上。

內存補齊是一個在筆試面試中比較容易考的知識點?


轉載于:https://blog.51cto.com/liuyuanxing/1926364

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的sizeof和strlen解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。