strlen函数的相关计算

今天先上代码:

例如6182b8e63ff64d3885af18600c8b8cef.png

 我们都知道strlen这个函数嘛,传的参数是地址,然后访问遇到\0就统计前面的字符个数。strlen  函数返回的是字符串的长度,其单位是字符个数。

 

 strlen  的功能是计算一个指定字符串的长度,函数原型为  size_t strlen(const char *s)  ,它会从字符串的首地址开始向后遍历,直到遇到第一个空字符  '\0'  停止,并返回遇到  '\0'  之前的字符个数。

 

在你提供的代码中, strlen(arr)  和  strlen(arr + 0)  都能正确计算字符串  "abcdef"  的长度,输出结果为 6,即字符串中的字符个数。而  strlen(*arr)  、 strlen(arr[1])  、 strlen(&arr)  、 strlen(&arr + 1)  等用法是不正确的,可能会导致未定义的行为或错误的结果。

 

需要注意的是, strlen  函数返回的是  size_t  类型,也就是  unsigned int  类型,它是一个无符号整数。在使用  strlen  函数时,要确保传入的参数是有效的字符串首地址,即指向以空字符  '\0'  结尾的字符数组的指针。

所以这张图片里面的图片就是:

278616eecc924407b2d122923b3448d7.png

 以下是对这段 C 语言代码的分析:

 

 strlen  函数用于计算字符串的长度,但要注意传递给  strlen  的参数必须是有效的字符串首地址。

 

-  strlen(arr) : arr  是字符串数组,其本身代表数组首地址,所以能正确计算字符串  "abcdef"  的长度,输出 6。

-  strlen(arr + 0) : arr + 0  等价于  arr ,也是数组首地址,输出 6。

-  strlen(*arr) : *arr  是数组的首元素  'a' ,不是字符串首地址,会导致未定义行为。

-  strlen(arr[1]) : arr[1]  是字符  'b' ,不是字符串首地址,会导致未定义行为。

-  strlen(&arr) : &arr  是数组的地址,但是是指向字符串首地址,所以也可以往后访问。

-  strlen(&arr + 1) : &arr + 1  跳过整个数组,然后指向下一个我们没开辟的空间。这里vs2019编译器打印出来是有值的,但是我觉得跳过这个数组往下访问,有值,也算非法访问了,毕竟我们都没开辟。

-  strlen(&arr[0] + 1) : &arr[0] + 1  是字符串  "bcdef"  的首地址,计算长度输出 5。

 

在实际编程中,应避免使用不恰当的参数调用  strlen  函数,以防止出现未定义的行为和错误。

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值