sizeof和strlen的區別
阿新 • • 發佈:2022-03-29
sizeof 和 strlen 的區別
-
strlen 是標頭檔案
中的函式,sizeof 是 C++ 中的運算子。 -
strlen 測量的是字串的實際長度(其原始碼如下),以 \0 結束。而 sizeof 測量的是字元陣列的分配大小。
strlen 原始碼:
size_t strlen(const char *str) {
size_t length = 0;
while (*str++)
++length;
return length;
}
例如:
#include <iostream> #include <cstring> using namespace std; int main() { char arr[10] = "hello"; cout << strlen(arr) << endl; // 5 cout << sizeof(arr) << endl; // 10 return 0; }
-
若字元陣列 arr 作為函式的形參,sizeof(arr) 中 arr 被當作字元指標來處理,strlen(arr) 中 arr 依然是字元陣列,從下述程式的執行結果中就可以看出。
#include <iostream> #include <cstring> using namespace std; void size_of(char arr[]) { cout << sizeof(arr) << endl; // warning: 'sizeof' on array function parameter 'arr' will return size of 'char*' . cout << strlen(arr) << endl; } int main() { char arr[20] = "hello"; size_of(arr); return 0; } /* 輸出結果: 8 64位中指標大小為8 5 */
-
strlen
本身是庫函式,因此在程式執行過程中,計算長度;而sizeof
在編譯時,計算長度; -
sizeof
的引數可以是型別,也可以是變數;strlen
的引數必須是char*
型別的變數。
參考書籍:力扣C++面試
-