C语言 strlen()函数

一、strlen()函数的简介

        strlen函数:计算的是字符串str的长度,从字符的首地址开始遍历,以 '\0' 为结束标志,然后将计算的长度返回,计算的长度并不包含'\0'。下面是库中的strlen()函数:

size_t  strlen (const char* str);

函数的参数为------const char* str:字符指针
返回值的类型------size_t:无符号整数(即:unsigned int)
前提知识:

const关键字:是用来定义常量的,若一个变量被const关键字修饰时,那么这个变量的值就不可以被改变。故:这里的 * str 的值是不能被修改的。
size_t数据类型:表示C中任何对象所能达到的最大长度,它是无符号整数。
   1.使用const关键字:这里只是计算字符串的长度,用const修饰,避免将原字符串修改掉。

   2.使用size_t数据类型:这里返回计算的字符串长度,长度最小值为0,不可能为负数。

二、strlen()函数的具体使用
场景一:

#include <stdio.h>
#include <string.h>
int main()
{
    char arr[10] = "abcde";
    int num = strlen(arr);
    printf("数组arr的长度为:%d\n", num);
 
    return 0;
}

输出的结果:
 

 场景二:

#include <stdio.h>
#include <string.h>
 
int main()
{
    char arr[] = { 'a','b','c','d','e' };
    int num = strlen(arr);
    printf("数组arr的长度:%d\n", num);
 
    return 0;
}

输出结果如下所示:

上述两种场景输出的结果并不相同 ,为什么会出现这样的结果,我们在用strlen函数时应该注意什么?

三、使用strlen函数的注意事项 
strlen函数:当计算长度时,只有遇到'\0'才会停止计算,同时计算的长度不包含'\0'

    场景一,arr字符数组中存储的是一个字符串(字符串是以'\0'为结束标志的),那么strlen遍历到字符 'e' 时,再向后遍历,就会遇到'\0',此时strlen停止遍历,返回字符个数:5;

    场景二:字符'a'、'b'、 'c' 、'd' 、'e'五个字符依次存储在arr的字符数组中,并没有存储'\0',所以'e'字符后面存储的内容我们并不知道有什么。而strlen函数只有遇到'\0'时才停止,所以返回的个数是一个随机值。

故:我们使用strlen函数时,应该检查字符数组是否以'\0'为结束标志。

四、实现strlen函数功能的三种方式
1.计数器的方式
代码如下:

#include <stdio.h>
#include <assert.h>
 
int count_strlen(const char* p)
{
    assert(p != NULL);
    int count = 0;
    while (*p != '\0')
    {
        count++;
        p++;
    }
    return count;
}
 
int main()
{
    char arr1[] = "abcdefg";
    int num1=count_strlen(arr1);
    printf("字符串arr1的长度为:%d\n", num1);
 
    return 0;
}

输出结果:

补充知识:assert(断言):是一个宏。

        assert 的作用是,将括号中的表达式计算出 ,如果其值为假(即为0),那么它会打印出一条出错信息,然后终止程序的运行。这里的assert是防止指针p指向为NULL。

2.递归的方式
代码如下:

#include <stdio.h>
#include <assert.h>
int recursion_strlen(char* p)
{
    assert(p != NULL);
    if (*p != '\0')
    {
        return 1 + recursion_strlen(++p);
    }
    else
    {
        return 0;
    }
}
int main()
{
    char arr2[] = "abcdef";
    int num2 = recursion_strlen(arr2);
    printf("字符串arr2的长度为:%d\n", num2);
 
    return 0;
}

输出结果:

3.指针减指针的方式
代码如下:

#include <stdio.h>
#include <assert.h>
 
int point_strlen(char* p)
{
    assert(p != NULL);
    char* start = p;
    while (*p != '\0')
    {
        p++;
    }
    return p - start;
}
int main()
{
    char arr3[] = "abcd";
    int num3 = point_strlen(arr3);
    printf("字符串arr3的长度为:%d\n", num3);
 
    return 0;
}

输出结果:

总结
        strlen()函数:返回 '\0'之前的字符个数,因此需规范初始化字符数组。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值