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

C 標準庫函數詳解:strlen — 計算字符串長度

     編輯:關於C語言

函數原型

size_t strlen(const char *s);

所需頭文件

#include <string.h>

ISO C 標準函數,完全可移植。

功能描述

計算字符串 s 的長度,即首個結束符 \0 前的字符數。不包含 \0 本身。

返回值

返回類型 size_t(無符號整數),值為字符數。

時間複雜度

O(N):必須逐字節掃描直到遇到 \0。頻繁在循環中調用 strlen 會導致 O(N²) 性能陷阱。

示例代碼


// strlen.c
#include <stdio.h>
#include <string.h>

int main() {
    char *s = "Golden Global View";
    printf("'%s' 長度: %zu\n", s, strlen(s)); // 18 (含空格)
    return 0;
}

關鍵注意事項

  1. 僅適用於以 \0 結尾的字符串:傳入非以 \0 結尾的緩衝區會導致越界讀取,未定義行為。
  2. 不計算 \0:strlen("") == 0,strlen("a") == 1。
  3. 返回類型 size_t:格式化輸出用 %zu (C99) 或 %lu 配合轉型。
  4. 性能陷阱:
    
    // 反例:O(N²)
    for (i = 0; i < strlen(s); i++) { ... }
    
    // 正例:O(N)
    size_t len = strlen(s);
    for (i = 0; i < len; i++) { ... }
            

內部實現原理(參考)


size_t strlen(const char *s) {
    const char *p = s;
    while (*p) p++;
    return p - s;
}

現代編譯器/庫常用向量化指令 (SSE/AVX/NEON) 每次檢查 16/32/64 字節,極大提升速度。

相關函數

  • strnlen(s, maxlen) (POSIX/GNU):帶上限檢查,避免非法緩衝區無限掃描。
  • wcslen:寬字符版。

總結

strlen 是 C 字符串處理的基石,理解其 O(N) 掃描本質、依賴 \0 結尾、返回 size_t 等特性,對編寫高效、安全的 C 代碼至關重要。避免在循環條件中重複調用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved