【C语言】strlen()函数

03-07 1035阅读 0评论

目录

一、strlen()函数的简介

二、strlen()函数的具体使用

三、使用strlen函数的注意事项 

四、实现strlen函数功能的三种方式

1.计数器的方式

2.递归的方式

3.指针减指针的方式

总结


一、strlen()函数的简介

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

size_t  strlen (const char* str);

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

前提知识:

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

       1.使用const关键字:这里只是计算字符串的长度,用const修饰,避免将原字符串修改掉。

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

    二、strlen()函数的具体使用

    场景一:

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

    输出的结果:

    【C语言】strlen()函数 第1张

     场景二:

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

    输出的结果: 

    【C语言】strlen()函数 第2张

    上述两种场景输出的结果并不相同

    为什么会出现这样的结果,我们在用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 
    #include 
    int count_strlen(const char* p)
    {
    	assert(p != NULL);
    	int count = 0;
    	while (*p != '

    2.递归的方式

    ') { count++; p++; } return count; } int main() { char arr1[] = "abcdefg"; int num1=count_strlen(arr1); printf("字符串arr1的长度为:%d\n", num1); return 0; }

    输出结果:

    【C语言】strlen()函数 第3张

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

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

    #include 
    #include 
    int recursion_strlen(char* p)
    {
        assert(p != NULL);
    	if (*p != '

    3.指针减指针的方式

    ') { 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; }

    代码如下:

    #include 
    #include 
    int point_strlen(char* p)
    {
    	assert(p != NULL);
    	char* start = p;
    	while (*p != '

    总结

    ') { p++; } return p - start; } int main() { char arr3[] = "abcd"; int num3 = point_strlen(arr3); printf("字符串arr3的长度为:%d\n", num3); return 0; }

    输出结果:

    【C语言】strlen()函数 第4张

    代码如下:

    输出结果:

    【C语言】strlen()函数 第5张


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


免责声明
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明。
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所
提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何
损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在
转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并白负版权等法律责任。

手机扫描二维码访问

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,1035人围观)

还没有评论,来说两句吧...

目录[+]