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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

C语言中sizeof与strlen的区别总结!

發布時間:2025/6/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言中sizeof与strlen的区别总结! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? ? ? ? ?C語言中sizeof與strlen區別總結!

先上一個例子:

結果:?

?

一、sizeof與strlen


char c[] = “abc\0cba”;

問題1:sizeof(c) = ?
問題2:strlen(c) = ?
問題3:執行free(c);之后會有什么后果?

解答1:8
解答2:3? ?(判斷字符串a的長度,這個長度不包括"\0")
解答3:段錯誤


二、 short a[100],sizeof(a)返回??


A 2 ? ? B 4 ? ? ? C 100 ? ? ? D 200 ? ? ? ?E 400?

答案:D

段錯誤:指訪問的內存超出了系統所給這個程序的內存空間。

匯編語言的程序設計是分4個段來設計的,即用來放數據的數據段DS,臨時存放數據的堆棧段SS、存放程序代碼的代碼段、存放附加數據的附加段,每一段的最大存儲空間為64KB,跳轉指令、程序調用指令在轉移到地址沒有超過64KB地址空間范圍的叫段內轉移,超出64KB地址空間范圍的叫段間轉移。這就是段內和段間的含義。?

三:下列程序在 32 位 linux 或 unix 中的結果是什么?

void func(char *str) {printf(" %d", sizeof(str));printf(" %d", strlen(str)); }int main() {char a[] = "123456789";printf(" %d", sizeof(a));printf(" %d", strlen(a));func(a);getchar();return 0; }

?結果: 10 9 4 9

在C/C++里數組作為參數時傳遞的實際上是指向數組第一個元素的指針,因此sizeof(str)返回的是指針的大小,即4。所有的指針大小都是4。

下列程序在 64?位 linux 或 unix 中的結果是什么?

結果: 10 9 8?9

為什么在64位系統中指針的大小是8,而32位的卻是4??

64位系統,這個位數指的是CPU 里面的通用寄存器的數據寬度為64位,也就是說一個地址占二進制位數是64,所以sizeof(double *)==sizeof(int *)==sizeof(char *)==64/8==8

32位系統,同理,他的一個地址占32位二進制空間,sizeof(double *)==sizeof(int *)==sizeof(char *)==32/8==4
其實明白了兩個系統的尋址原理就能明白,大體就是這個原因。地址跟系統有關,但是基本數據類型占的大小是由C語言本身決定。?

四:sizeof與strlen的區別本質上而言:

不同點:

(1)sizeof是一個運算符,它用類型作為參數,而strlen只是C庫提供的一個函數,他用來計算以’/0’結果的字符串的長度,即它的參數只能是char*。

(2)strlen的結果要在運行的時候才能計算出來,是用來計算字符串的實際長度,而sizeof的結果是在編譯的時候就計算過的,是類型或變量占內存的大小。 注意:sizeof計算的是類型或者變量占內存的大小。

相同點:

(1)它們相同的地點就只是返回值,都是一個size_t類型的值。

總結

以上是生活随笔為你收集整理的C语言中sizeof与strlen的区别总结!的全部內容,希望文章能夠幫你解決所遇到的問題。

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