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

C語言字串長度 strlen 手寫實作:指針迭代版與遞迴版

     編輯:關於C

方法一:指針迭代 (標準、高效)

#include 
size_t my_strlen(const char *s) {
    assert(s);
    size_t len = 0;
    while (*s++) len++;
    return len;
}

方法二:遞迴 (教學展示調用棧)

size_t my_strlen_rec(const char *s) {
    assert(s);
    return *s ? 1 + my_strlen_rec(s+1) : 0;
}

測試

int main() {
    const char *str = "abcdef";
    printf("%zu\n", my_strlen(str));      // 6
    printf("%zu\n", my_strlen_rec(str));  // 6
    return 0;
}

遞迴缺點

  • 棧深度 = 字串長度,長字串導致**棧溢位**。
  • 函數調用開銷大,效能遠低於迭代。
  • 僅適合教學理解遞迴結構。

標準庫實現技巧

  • 對齊檢查 + 字長 (64bit) 逐塊讀取 + SIMD 指令 (SSE2/AVX2) 並行比較 0 位元組。
  • GCC/Clang __builtin_strlen 直接編譯為優化指令序列。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved