20.5.【C语言】求长度(sizeof和strlen)的两种方式

1.sizeof

用于测数据类型的长度的函数(详细见第3篇)

2.strlen

调用前需要写

#include <string.h>

其计算长度时只有遇到\0才会停止,并且\0不会计算在内

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

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

结果是个随机数!strlen读内存中的数据,其读取不会因为到'b'就停止,在内存中只有遇到\0才会停止

5039bff43aa945629fe624c6fa68e3e3.png

法1:for循环打印地址

#include <stdio.h>
int main()
{
    char arr[] = {'a','b','c'};
    for (int i = 0; i < strlen(arr); i++)
    {
        printf("%p\n",&arr[i]);
    }
    printf("%d", strlen(arr));
    return 0;
} 

8b113f634bc24ab1a4804385b773455a.png

到00F5FBF6停止打印

法2.可借助VS调用内存说明

先下断点后&arr 

833c905f76644ecf88f79147832e80bb.png

0x012FF93F处是00相当于/0,strlen停止读取

解释arr+strlen:前面%p是打印地址,arr代表数组中的首元素,取arr首元素的地址然后加上偏移量(strlen(arr))即可找到\0的地址

总结:sizeof()算\0,strlen()不算\0

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值