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;
}
strlen("") == 0,strlen("a") == 1。size_t:格式化輸出用 %zu (C99) 或 %lu 配合轉型。
// 反例: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 代碼至關重要。避免在循環條件中重複調用。