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引用的字符串常量的长度通常会被优化为一个常数整数。
- ↑ "strlen.c Revision 1.4". FreeBSD. 2002-03-21. Retrieved 2009-03-04.
- ↑ "Contents of /stable/10/lib/libc/string/strlen.c". FreeBSD. 2013-10-10.
- Linux 库函数 手册 : 计算字符串的长度 –
- C++ 参考资料
std::strlen