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

2021-08-28 09:03:59 字數 1147 閱讀 2471

問題1:sizeof(c) = ?

問題2:strlen(c) = ?

問題3:執行free(c);之後會有什麼後果?

解答1:8

解答2:3   (判斷字串a的長度,這個長度不包括"\0")

解答3:段錯誤

a 2     b 4       c 100       d 200        e 400 

答案:d

段錯誤:指訪問的記憶體超出了系統所給這個程式的記憶體空間。

組合語言的程式設計是分4個段來設計的,即用來放資料的資料段ds,臨時存放資料的堆疊段ss、存放程式**的**段、存放附加資料的附加段,每一段的最大儲存空間為64kb,跳轉指令、程式呼叫指令在轉移到位址沒有超過64kb位址空間範圍的叫段內轉移,超出64kb位址空間範圍的叫段間轉移。這就是段內和段間的含義。 

void func(char *str)

int main()

結果: 10 9 4 9

在c/c++裡陣列作為引數時傳遞的實際上是指向陣列第乙個元素的指標,因此sizeof(str)返回的是指標的大小,即4。所有的指標大小都是4。

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

結果: 10 9 8 9

不同點:

(1)sizeof是乙個運算子,它用型別作為引數,而strlen只是c庫提供的乙個函式,他用來計算以』/0』結果的字串的長度,即它的引數只能是char*。

(2)strlen的結果要在執行的時候才能計算出來,是用來計算字串的實際長度,而sizeof的結果是在編譯的時候就計算過的,是型別或變數佔記憶體的大小。 注意:sizeof計算的是型別或者變數佔記憶體的大小。

相同點:

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

c語言中陣列與sizeof

我以前的理解是 陣列名字就是指向陣列首元素的指標,然而用sizeof 運算元組名字,把我又弄得有些疑惑了。查了查資料,終於明白了。原來,陣列名字做形參時才被當作指標。而sizeof 並不是乙個函式,而是乙個單目運算子,所以sizeof 裡寫陣列名字,返回的就是陣列佔了多少位元組。例如 char a ...

C語言中sizeof與strlen區別

sizeof 初始的分配的空間大小,期中 sizeof unsigned char 1 sizeof signed char 1 sizeof int 4 sizeof unsigned int 4 sizeof short int 2 sizeof unsigned short 2 sizeof ...

C語言中sizeof與strlen區別

一.本質區別 sizeof 和 strlen 有本質上的區別。sizeof 是c 語言的一種單目運算子,如 等,並不是函式,sizeof 的優先順序為2 級,比 等3 級運算子優先順序高,sizeof 以位元組的形式給出運算元的儲存空間的大小。而strlen 是乙個函式,是由c 語言的標準庫提供的。...