C语言详细解读函数:strlen()函数
💓 博客主页:Kitten饭团的CSDN主页
📁 文章专栏:C语言专栏
期待您的关注
目录
一、strlen函数的基本概念
1.1 函数定义
1.2 功能描述
二、strlen函数的使用方法
2.1 基本用法示例
2.2 常用场景
三、strlen函数的实现原理
四、strlen函数的注意事项
4.1 字符串必须以\0结尾
4.2 与sizeof的区别
一、strlen函数的基本概念
函数概念来自于网站http://cplusplus.com
头文件为
1.1 函数定义
函数的原型:
参数说明:
🌈 函数参数str的含义:指向以\0结尾的C字符串的指针。
🌈 参数类型char*的含义:表示传递的参数为char型的常目标指针。
返回值:
🌈 返回值类型size_t的含义:表示字符串长度的无符号整数(unsigned int)类型。
1.2 功能描述
功能:获取字符串的长度。
实现原理:
🌈 C 字符串的长度由终止空字符(\0)决定。
🌈 strlen计算从字符串开头到\0之间的字符数,不包括\0本身。
二、strlen函数的使用方法
2.1 基本用法示例
使用方法:
#include
#include
int main()
{
char str[128] = "Hello,World!"; // 定义字符数组str容量为128
int len = strlen(str); // 定义整数类型int len,然后把strlen(str)函数的返回值赋值给len
printf("Length of string: %d\n", len); // 输出:12
return 0;
}
打印结果:
由此可见打印结果不包括结束符\0。
2.2 常用场景
字符串的遍历:
for (int i = 0; i < strlen(str); i++)
{
printf("%c\n", str[i]);
}
三、strlen函数的实现原理
内部实现机制:根据函数的基本概念来写一个自己的strlen函数
示例代码:
#include
#include
// 给类型取个别名
typedef unsigned long my_size_t; // 简化类型的命名,主要是为了方便移植
// 自己写的库
/**
* @brief 求一个指定字符串的长度
* @note None
* @param s:需要求长度的字符串
* @retval 成功:返回字符串的长度,不包含字符串结束标记'\0'
失败:返回0
*/
my_size_t MyLib_StrLen(const char *s)
{
// 1、如果传进来的字符串是空的,那就没有必要继续下面的判断了
if ( s == NULL)
return 0; // 失败,返回0
// 2、计算从左到右,一直到'\0',有多少个字符
my_size_t count = 0;
while ( *s != '\0')
{
count++;
s++;
}
// 3、返回计算的字符串的长度
return cnt;
}
// 主函数
int main()
{
// (1)、官方写的库
const char str1[] = "Hello,Fantuan!";
size_t len1 = strlen(str1);
printf("len1 == %zu\n", len1); // 无符号整形的打印 - %zu
// (2)、自己写的库
const char str2[] = "Hello,Fantuan!";
size_t len2 = MyLib_StrLen(str2);
printf("len2 == %zu\n", len2);
return 0;
}
四、strlen函数的注意事项
4.1 字符串必须以\0结尾
核心问题:
🌈 strlen函数通过查找终止符\0来确定字符串的长度。
🌈 如果字符串没有以\0结尾,strlen会继续读取内存,直到遇到\0,这可能导致未定义行为(如访问非法内存、程序崩溃等)。
示例:
char str[5] = {'H', 'e', 'l', 'l', 'o'}; // 未以\0结尾
printf("Length: %zu\n", strlen(str)); // 未定义行为
问题分析:
🌈 str数组没有以\0结尾,strlen会继续读取内存,直到遇到\0,可能导致程序崩溃或返回错误结果。
4.2 与sizeof的区别
sizeof是一个运算符,用于计算变量或数据类型占用的内存大小(包括\0)。
streln是一个库函数,用于计算字符串的实际长度(不包括\0)。
strlen函数的内容到此结束了,要是有不足希望各位能够在评论区指出,要是文章对你有帮助,可以给个免费的赞和收藏💞💞💞