跳转到内容

C 编程/string.h/strlen

来自维基教科书,开放的书籍,构建开放的世界

在 C 标准库中,strlen 是一个字符串函数,用于确定 C 字符串的长度。

示例用法

[编辑 | 编辑源代码]
#include <stdio.h>
#include <string.h>
 
int main()
{
    char *string = "Hello World";
    printf("%lu\n", (unsigned long)strlen(string));
    return 0;
}

此程序将打印值 11,即字符串 "Hello World" 的长度。 字符串存储在一个名为char的数据类型的数组中。 字符串的结尾通过在数组中搜索第一个空字符来找到。

重要的是要注意,此长度*不包括*用于 C 字符串结尾字符的尾随空字节的数组条目。 因此,如果您需要复制 C 字符串,您需要分配 strlen() + 1 的空间。

FreeBSD 6.2 实现了strlen如下所示:[1]

size_t strlen(const char * str)
{
    const char *s;
    for (s = str; *s; ++s) {}
    return(s - str);
}

可以使用 C 编写更快的版本,它检查完整的机器字而不是逐字节。 Hacker's Delight 给出了一个利用位运算来检测这些字节中是否有任何字节为空 ('\0') 的算法。 当前的 FreeBSD 实现就是这样做的。[2]

现代 C 编译器通常会提供strlen的快速内联版本,它用汇编语言编写,要么使用位运算技术,要么使用某些 CISC 处理器提供的特殊指令。 此外,strlen引用的字符串常量的长度通常会被优化为一个常数整数。

参考资料

[编辑 | 编辑源代码]
  1. "strlen.c Revision 1.4". FreeBSD. 2002-03-21. Retrieved 2009-03-04.
  2. "Contents of /stable/10/lib/libc/string/strlen.c". FreeBSD. 2013-10-10.
[编辑 | 编辑源代码]
华夏公益教科书