一、strlen()函数的简介
strlen函数:计算的是字符串str的长度,从字符的首地址开始遍历,以 ‘\0’ 为结束标志,然后将计算的长度返回,计算的长度并不包含’\0’。下面是库中的strlen()函数:
size_t strlen (const char* str);
说明:计算字符串sting的长度,并返回字符串string的长度
返回类型:size_t 是一个无符号长整型类型,直接作为数值运算时得注意,计算结果是否会越界
#include "stdio.h"
#include "string.h"
int main(void )
{
char str[30] = "good morning everybody" ; // 22个字符
printf(" str = %s strlen(str) = %d \n",str,strlen(str));
return 0 ;
}
结果
注意事项:strlen是不会计算\0之后的长度的,strlen函数遇到\0就会停止下来
在上面字符串变量,赋值中加入一个 \0 测试一下
#include "stdio.h"
#include "string.h"
int main(void)
{
char str[30] = "good morning \0 everybody";
printf(" str = %s strlen(str) = %d \n", str, strlen(str));
return 0;
}
结果
测试发现不仅,strlen不计算 \0之后的数据,printf输出也一样
原因就回到数组的问题上了,printf是以%s,字符串的形式输出,遇到字符 ‘\0’ 就认为到达 数组末端了,然后就停止输出了。
二、strlen()的三种实现方法
2.1第一种方法(直接)
size_t my_strlen(const char* str)//字符串是放在常量字符串中,不能被改变,所以这里最好用用const修饰一下下啦
{
assert(str != NULL);//p如果接收过来的是空指针,那么这里运行会崩溃的,所以这里用assert函数断言一下
int count = 0;//计数
while (*str != '\0')
{
count++;//当它的字符不等于'\0'时,计数加一
str++;//再往下一个字符找
}
return count;
}
2.2第二种方法(递归)
size_t my_strlen(const char* str)//字符串是放在常量字符串中,不能被改变,所以这里最好用用const修饰一下下啦
{
assert(str != NULL);//p如果接收过来的是空指针,那么这里运行会崩溃的,所以这里用assert函数诊断一下
if (*str != '\0')
{
return 1+my_strlen(str+1);
}
else
{
return 0;
}
}
2.3第三种方法(指针-指针)
两个指针相减,得到的是两个指针之间元素的个数。我们先用一个指针放首字符地址,然后再找到最后一个字符的地址,用最后一个字符地址减去第一个字符地址,就是他们之间元素个数。
size_t my_strlen(const char* str)//字符串是放在常量字符串中,不能被改变,所以这里最好用用const修饰一下下啦
{
assert(str != NULL);//p如果接收过来的是空指针,那么这里运行会崩溃的,所以这里用assert函数诊断一下
const char* start = str;//定义一个指针放字符串首字符的地址,因为*str接收的字符串为常量字符串,所以这里最好也用const修饰一下
while (*str != '\0')
{
str++;
}
return str - start;
}
三、总结
字符串需要以\0作为结尾,strlen函数返回的是在字符串中\0前面出现的字符个数(不包含\0)
版权声明:本文为qq_27928443原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。