sizeof與strlen有哪些區別

摘自:C和C++程序員面試祕籍

它們的區別如下:
1)sizeof是操作符,strlen是函數。
2)sizeof操作符的結果類型是size_t,它在頭文件中typedef爲unsigned int 類型,該類型保證能容納實現所建立的最大對象的字節大小。
3)sizeof可以用類型做參數,strlen只能用char *做參數,且必須是以\0結尾的。
4)數組做sizeof的參數不退化,傳遞給strlen就退化爲指針了。
5)大部分編譯程序在編譯的時候sizeof就被計算過了,這就是sizeof(x)可以用來定義數組維度的原因。strlen的結果要在運行的時候才能計算出來,它用來計算字符串的長度,不是類型佔內存的大小。
6)sizeof後如果是類型,必須加括弧,如果是變量名,可以不加括弧。這是因爲sizeof是個操作符,而不是個函數。
在計算字符串數組的長度上有區別:

char str[20] = "0123456789";
int a = strlen(str);
int b = sizeof(str);

a 計算的是以0x00結束的字符串的長度(不包括0x00結束符),這裏結果是10。
b 計算的則是分配的數組str[20]所佔的內存空間的大小,不受裏面存儲內容的改變而改變,這裏結果爲20。

如果要計算指針指向的字符串的長度,則一定要使用strlen。例如。

char* ss = "0123456789";
int a = sizeof(ss);
int b = strlen(ss);

a 計算的是ss指針佔用的內存空間大小,這裏結果是4。
b 計算的是ss指向的字符串的長度,這裏結果是10。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章