C语言字符串长度函数是什么?

99ANYc3cd6
预计阅读时长 9 分钟
位置: 首页 C语言 正文

在C语言中,字符串是以字符数组的形式存储的,并以空字符 '\0' 作为结束标志,要获取字符串(字符数组)的长度,可以使用以下几种方法:

c语言字符串的字符数组的长度的函数
(图片来源网络,侵删)

使用 strlen 函数(推荐)

strlen 是C标准库 <string.h> 中提供的函数,用于计算字符串的长度(不包括结尾的 '\0')。

语法

size_t strlen(const char *str);
  • 参数str 是指向字符串的指针。
  • 返回值:返回字符串的长度(size_t 类型,通常是 unsigned long)。

示例

#include <stdio.h>
#include <string.h>
int main() {
    char str[] = "Hello, World!";
    size_t len = strlen(str);
    printf("字符串长度: %zu\n", len);  // 输出: 13
    return 0;
}

注意事项

  • strlen 会遍历字符串直到遇到 '\0',因此如果字符串没有正确终止(即缺少 '\0'),会导致未定义行为(如越界访问)。
  • 时间复杂度为 O(n)(需要遍历整个字符串)。

手动计算字符串长度

如果不使用 strlen,可以自己遍历字符数组,直到遇到 '\0'

示例

#include <stdio.h>
size_t my_strlen(const char *str) {
    size_t len = 0;
    while (str[len] != '\0') {
        len++;
    }
    return len;
}
int main() {
    char str[] = "Hello, World!";
    size_t len = my_strlen(str);
    printf("字符串长度: %zu\n", len);  // 输出: 13
    return 0;
}

注意事项

  • strlen 一样,如果字符串没有 '\0',会导致越界访问。
  • 适用于理解底层原理,但实际开发中建议直接使用 strlen

使用 sizeof 计算字符数组总长度(仅适用于静态数组)

sizeof 返回的是整个数组的字节大小(包括 '\0'),而不是字符串的实际长度。仅适用于静态定义的字符数组,不适用于指针或动态分配的内存。

示例

#include <stdio.h>
int main() {
    char str[] = "Hello";  // 隐含 '\0',实际占用 6 字节
    size_t total_size = sizeof(str);  // 输出 6
    size_t str_len = strlen(str);     // 输出 5
    printf("数组总大小: %zu\n", total_size);  // 6
    printf("字符串长度: %zu\n", str_len);     // 5
    return 0;
}

注意事项

  • str 是指针(如 char *str = "Hello"),sizeof(str) 返回的是指针的大小(通常是 4 或 8 字节),而不是字符串长度。
  • 不能用于动态分配的数组(如 malloc 分配的内存)。

使用 wcslen 处理宽字符字符串(Unicode)

如果处理的是宽字符字符串(如 wchar_t),可以使用 <wchar.h> 中的 wcslen

c语言字符串的字符数组的长度的函数
(图片来源网络,侵删)

示例

#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main() {
    setlocale(LC_ALL, "");  // 设置本地化环境
    wchar_t wstr[] = L"你好,世界!";
    size_t len = wcslen(wstr);
    printf("宽字符串长度: %zu\n", len);  // 输出: 6
    return 0;
}

方法 适用场景 是否包含 '\0' 时间复杂度
strlen 推荐方法,适用于所有字符串 ❌ 不包含 O(n)
手动遍历 学习底层原理 ❌ 不包含 O(n)
sizeof 仅适用于静态字符数组 ✅ 包含 O(1)
wcslen 宽字符字符串(Unicode) ❌ 不包含 O(n)

推荐使用 strlen,除非有特殊需求(如避免标准库调用)。

c语言字符串的字符数组的长度的函数
(图片来源网络,侵删)
-- 展开阅读全文 --
头像
织梦data tplcache缓存如何清理?
« 上一篇 今天
织梦currentstyle如何正确使用?
下一篇 » 今天
取消
微信二维码
支付宝二维码

目录[+]