2025年strlen函数详解:字符串【长度计算】的利器

strlen函数详解:字符串【长度计算】的利器目录 一 strlen 函数的简介 二 strlen 函数的实现原理 三 strlen 函数的使用 场景 1 场景 2 四 模拟实现 strlen 函数 1 计数器的方式 2 指针 指针的方式

大家好,我是讯享网,很高兴认识大家。

目录

一,strlen函数的简介

二,strlen函数的实现原理

三,strlen函数的使用 

🍂场景1 :

🍂场景2: 

四,模拟实现strlen函数

1,计数器的方式

2,指针 - 指针的方式

3,递归的方式


一,strlen函数的简介

strlen函数是C语言中的一个字符串处理函数,其主要用途是计算一个字符串的长度。它接受一个指向字符串的指针作为参数,并返回一个整数值,表示字符串的长度(不包括空字符'\0')。

🍂函数原型:  

size_t strlen ( const char * str );

讯享网
  • 函数参数为---const char * str:要获取字符串长度的地址。
  • 返回值类型---size_t:无符号整数类型(unsigned int),表示内存中的大小或索引。

很多小伙伴不太了解size_t类型究竟是什么,下面我们举个例子,大家一看便知:

讯享网#include <stdio.h> #include <string.h> int main() { if (strlen("abc") - strlen("abcdef") > 0) { printf(">=\n"); } else { printf("<\n"); } return 0; }

如果从数学的角度去分析的话,strlen("abc")的长度是3,strlen("abcdef")的长度是63-6的结果是-3呀,打印出来的结果就应该是<

但实际上当我们去运行这个代码的时候会发现打印出来的结果为>=


讯享网

为什么是>=呢,就是因为strlen的返回值为无符号整型size_t,而两个无符号数相减得到的还是无符号数,当-3被当作无符号数的时候得到的会是一个非常大的正数,肯定是>0的,所以运行结果就为>=。 

二,strlen函数的实现原理

它通过遍历字符串中的每个字符,直到遇到空字符'\0'为止。

🍂具体步骤: 

  1. 声明一个整形变量count,并初始化为0,用于计数。
  2. 从字符串的第一个字符开始,逐个检查每个字符是否为空字符'\0'
  3. 如果当前的字符不为空字符'\0',则count加1。
  4. 继续检查下一个字符,直到遇到'\0'为止。
  5. 返回count作为字符串的长度。

三,strlen函数的使用 

💘使用strlen函数必须添加头文件 #include <string.h>

🍂场景1 :

#include <stdio.h> #include <string.h> int main() { const char* str = "abcdef"; size_t count = strlen(str); printf("%d\n", count); return 0; }

🎈运行结果: 

🎈解释:

这个代码将"abcdef"字符串(字符串是以'\0'为结束标志的)首字符的地址存在str里边,再将str传给strlen,那么strlen遍历到字符'f'时,再向后遍历,就会遇到'\0',此时strlen停止遍历,返回字符个数:6

🍂场景2: 

讯享网#include <stdio.h> #include <string.h> int main() { char str[] = { 'a', 'b', 'c', 'd', 'e', 'f' }; size_t count = strlen(str); printf("%d\n", count); return 0; } 

🎈运行结果: 

🎈解释:

将 'a', 'b', 'c', 'd', 'e', 'f' 六个字符存储到数组str里边,数组只申请了6个空间,并没有存储'\0',所以当strlen遍历到字符'f'时,它后边存储的内容是什么我们并不知道,什么时候遇到'\0'我们也不知道,而strlen函数只有遇到'\0'才会停止,所以返回的数是一个随机值。


 🍂总结:

strlen函数只能用于计算以空字符'\0'结尾的字符串的长度,如果字符串没有以'\0'结尾,结果将不可预测。

四,模拟实现strlen函数

1,计数器的方式

#include <stdio.h> #include <string.h> #include <assert.h> size_t my_strlen(const char* str) { assert(str); size_t count = 0; while (*str != '\0') { count++; str++; } return count; } int main() { char arr[] = { "abcdef" }; size_t len = my_strlen(arr); printf("%zd\n", len); return 0; }

2,指针 - 指针的方式

讯享网#include <stdio.h> #include <string.h> #include <assert.h> size_t my_strlen(const char* str) { assert(str); char* p = str; while (*str != '\0') { str++; } return str - p; } int main() { char arr[] = { "abcdef" }; size_t len = my_strlen(arr); printf("%zd\n", len); return 0; } 

🎈注:

相同类型的指针相减,得到的是两个指针之间的元素个数。 

3,递归的方式

#include <stdio.h> #include <string.h> #include <assert.h> size_t my_strlen(const char* str) { assert(str); if (*str != '\0') return 1 + my_strlen(str + 1); else return 0; } int main() { char arr[] = { "abcdef" }; size_t len = my_strlen(arr); printf("%zd\n", len); return 0; }
小讯
上一篇 2025-03-16 13:57
下一篇 2025-04-04 21:05

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/55136.html