首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

sizeof 與 strlen 差異完全解析:編譯期 vs 執行期

     編輯:C++ 入門

核心差異一覽

特性sizeofstrlen
性質**運算子**(編譯期計算)**函式**(執行期計算)
單位位元組字元數(不含結束符)
參數型別或表達式const char*(以 '\0' 結尾)
陣列參數回傳整個陣列大小退化為指標,回傳字串長度
指標參數回傳指標大小(4/8 位元組)回傳字串長度
結構體含對齊填充的總大小不適用

經典範例

char str[] = "Hello";      // 6 位元組(含 \0)
char *ptr = str;

sizeof(str);   // 6
sizeof(ptr);   // 4 (32位) 或 8 (64位)
strlen(str);   // 5
strlen(ptr);   // 5

// 結構體
struct S { char c; int i; };
sizeof(S);     // 8 (對齊填充)

常見誤區

  1. 以為 sizeof(char*) 等於字串長度 —— 實際是指標大小。
  2. 函式參數為陣列時 sizeof 失效 —— 參數退化為指標,void f(char a[100]) { sizeof(a); } 回傳指標大小。
  3. strlen 讀取非 '\0' 結尾緩衝區 —— 未定義行為,可能越界讀取。

最佳實務

  • 需要**物件佔用記憶體大小**(配置、序列化、memcpy)用 sizeof。
  • 需要**字串可見字元長度**(顯示、解析、複製)用 strlen(確保以 '\0' 結尾)。
  • C++ 優先使用 std::string / std::vector,其 .size() 語意明確且安全。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved