strlen函数是一个位于C标准库<string.h>的库函数

是用以计算字符串长度的函数,即为计算 ‘\0’前字符的数量

函数的声明与使用
size_t strlen(const char *str)
参数类型是
字符指针,在调用strlen函数时,需将数组的数组名(也就是首元素地址)传给strlen函数,strlen函数会以此地址为起始位置,向后计算字符串长度。

返回值类型是 size_t,其实也就是 unsigned int 类型。

举个例子
int main() { char arr[] = "123456789"; size_t sz = strlen(arr); printf("%u",
sz); return 0; }

strlen函数的使用非常简单,但有两个需要注意的地方

1.只有strlen函数找到 \0 时,方会停止计算长度。诺所需求长度的字符数组中无
\0,strlen会自起始坐标往后,一直寻找\0,直到找到\0为止。此时函数的返回值是随机的。
int main() { char arr[] = {'1','2','3','4','5'}; size_t sz = strlen(arr);
printf("%u", sz); return 0; }

 2.strlen的返回值是 size_t类型的,即无符号整型。

在比较两字符串长度时,不建议使用相减的形式

比如以下这个情况
int main() { char arr1[] = "123456"; char arr2[] = "123456789"; size_t sz1 =
strlen(arr1); size_t sz2 = strlen(arr2); if (sz1 - sz2 > 0) printf("arr1 >
arr2"); else printf("arr1 < arr2"); //printf("%u", sz); return 0; }

 size_t相减时,整个表达式会发生算数转化,在内存中存放的-3的补码会被看作是size_t类型数据的补码,因size_t类型的原反补相同,也就是-3的补码将被看做是表达式结果的原码,是一个非常打的数字。

strlen函数的三种模拟

三种模拟,实际上都是以找\0为根本的,借助不同的思想,完成对字符串长度的计算

1.计数器实现 
size_t my_strlen(char* str) { assert(str != NULL); int count = 0; while (*(str
+ count++) != '\0'); return --count; }
2.递归实现
size_t my_strlen(char* str) { if (*str != '\0') return my_strlen(str + 1) + 1;
else return 0; }
3.指针实现
size_t my_strlen(char* str) { char* ret = str; while (*str++); return str -
ret-1; }

技术
今日推荐
阅读数 170189
阅读数 23
阅读数 5
阅读数 0
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:766591547
关注微信