欧洲世界杯_06年世界杯梅西 - hello186.com

C语言strlen函数详解

2025-06-08 00:42:41 世界杯经典比赛 1156

文章目录

strlen函数的介绍strlen函数的使用strlen函数的注意事项

strlen函数的模拟实现一、计数器的方法二、地址相减的方法三、递归的方法

strlen函数的介绍

strlen函数是C语言中的一个字符串处理函数,用于计算一个字符串的长度,即该字符串中包含的字符数(不包括字符串结尾的’\0’),头文件为,基本语法为size_t strlen(const char *str);

strlen函数的使用

#include

#include

int main()

{

char arr[20] = "hello word";

printf("%zd", strlen(arr));

return 0;

}

输出结果

strlen函数的返回类型为size_t,所以使用%zd输出(%zd为无符号整型)

strlen函数的注意事项

参数指向的字符串必须要以 ‘\0’ 结束 接下来看一串没有\0的代码

#include

#include

int main()

{

char arr[] = { 'a','b','c' };

printf("%zd\n",strlen(arr));

return 0;

}

字符‘a’,‘b’,‘c’ 三个字符依次存储在arr数组中,并没有存储\0,所以c后面是什么我们并不知道,但是strlen计算的是\0之前的字符数,所以这里返回的是一个随机值。所以我们在使用strlen函数时应检查字符串中是否有\0。

strlen函数的模拟实现

一、计数器的方法

#inlcude

#include

size_t my_strlen(const char* arr)

{

int count = 0;

assert(arr!=NULL);

//定义一个count变量,计算出arr元素的个数

//遍历arr数组当*arr不等于\0时count++;

while (*arr != '\0')

{

count++;

arr++;

}

//最后将count返回

return count;

}

int main()

{

char arr[] = "hello word";

size_t ret = my_strlen(arr);

printf("%zd\n", ret);

return 0;

}

输出结果 注:assert() 宏接受⼀个表达式作为参数。如果该表达式为真(返回值⾮零), assert() 不会产⽣任何作⽤,程序继续运⾏。如果该表达式为假(返回值为零), assert() 就会报错,在标准错误流 stderr 中写⼊⼀条错误信息,显⽰没有通过的表达式,以及包含这个表达式的⽂件名和⾏号。使⽤ assert() 有⼏个好处:它不仅能⾃动标识⽂件和出问题的⾏号,还有⼀种⽆需更改代码就能开启或关闭 assert() 的机制。如果已经确认程序没有问题,不需要再做断⾔,就在 #include 语句的前⾯,定义⼀个宏 NDEBUG 。

二、地址相减的方法

#inlcude

#include

size_t my_strlen(const char* arr)

{

const char* start = arr;

//将arr的首元素地址存放start中

assert(arr!=NULL);

while (*arr != '\0')

{

arr++;

}

//遍历arr,此时arr的位置来到了\0

return arr - start;

//将arr - start的值返回

}

int main()

{

char arr[] = "hello word";

size_t ret = my_strlen(arr);

printf("%zd\n", ret);

return 0;

}

输出结果

三、递归的方法

size_t my_strlen(char*arr)

{

if (*arr != '\0')

{

return 1 + my_strlen(arr + 1);

}

//当arr!= \0时让1+my_strlen(arr+1),此时arr+1指向'e'的位置,再重复此操作

else

{

return 0;

}

}

int main()

{

char arr[] = "hello word";

size_t ret = my_strlen(arr);

printf("%zd\n", ret);

return 0;

}

输出结果 总结:在使用strlen函数时应注意字符串中有没有包含\0