1. 程式人生 > 其它 >sizeof和strlen的區別

sizeof和strlen的區別

sizeof 和 strlen 的區別

  1. strlen 是標頭檔案 中的函式,sizeof 是 C++ 中的運算子。

  2. 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;
}
  1. 若字元陣列 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
    */
    
    1. strlen 本身是庫函式,因此在程式執行過程中,計算長度;而 sizeof 在編譯時,計算長度;
    2. sizeof 的引數可以是型別,也可以是變數;strlen 的引數必須是 char* 型別的變數。

    參考書籍:力扣C++面試