1 函数原型
strlen():计算字符串长度,函数原型如下:
size_t strlen ( const char * str );
cstring库描述如下:
Get string length
1. Returns the length of the C string str.
2. The length of a C string is determined by the terminating null-character: A C string is as long as the number of characters between the beginning of the string and the terminating null character (without including the terminating null character itself).
- strlen()函数:
(1)计算字符串str的长度;
(2)字符串长度等于字符串开头和字符串末尾的空字符’\0’之间的字符数(不包括空字符’\0’); - 字符串str:
(1)字符串:存储在字符数组中的字符序列,以空字符’\0’作为结束标志;空字符’\0’是个隐藏字符,在字符串中并不显示;
(2)空字符串:第一个字符就是空字符’\0’的字符串是空字符串,其长度为0;
(3)未终止的字符串:如果str指向的字符串没有被正确终止(即不包含空字符’\0’),则strlen()函数会继续读取内存直到遇到空字符’\0’为止,这可能会导致未定义行为,包括读取未授权的内存区域。
2 参数
strlen()函数只有一个参数str:
- 参数str是指向要计算长度的字符串的指针,类型为char*型。
cstring库描述如下:
str
1. C string.
3 返回值
strlen()函数的返回值类型为size_t型:
- 返回值为字符串str的长度。
cstring描述如下:
1. The length of string.
4 示例
4.1 示例1
注意字符串长度和字符数组大小的区别,示例代码如下所示:
int main()
{
//
char mystr[100] = "Hello world.";
//
printf("字符串长度:%zu\n", strlen(mystr));
//
printf("字符数组大小:%d\n", sizeof(mystr));
//
return 0;
}
代码运行结果如下图所示:
4.2 示例2
演示空字符串,示例代码如下所示:
int main()
{
//
char mystr[100] = { 0 };
//
while (1) {
//
printf("请输入字符串(仅按Enter键退出):\n");
//
gets(mystr);
//
if (strlen(mystr)) {
printf("字符串:\"%s\"长度为%zu\n", mystr, strlen(mystr));
printf("\n");
}
else
{
printf("字符串为空\n");
break;
}
}
//
return 0;
}
代码运行结果如下图所示:
代码及运行结果分析如下:
- 当仅按下回车键Enter时,mystr字符串是个空字符串,即只包含空字符’\0’,字符串长度为0,while循环结束退出。
4.3 示例3
演示未终止的字符串,示例代码如下所示:
int main()
{
//
char mystr[12] = { 'H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '.' };
//
printf("字符串长度:%zu\n", strlen(mystr));
//
printf("字符数组大小:%d\n", sizeof(mystr));
//
return 0;
}
代码运行结果如下图所示:
代码及运行结果分析如下:
- 字符数组mystr并不能算是一个字符串,因为末尾并没有空字符’\0’作为结束标志;在使用strlen()函数计算“字符串”mystr的长度时,strlen()函数会越过字符数组mystr的最后一个字符’.‘,继续读取内存,直至遇到空字符’\0’为止。
4.4 示例4
编写自己的字符串长度计算函数,示例代码如下所示:
size_t my_strlen(const char* str) {
//
assert(str != NULL);
//
const char* s = str;
//
while (*s) {
s++;
}
//
return (s - str);
}
int main()
{
//
char* mystr = "Hello world.";
//
printf("字符串长度:%zu\n", my_strlen(mystr));
//
return 0;
}
代码运行结果如下图所示: