C语言基础:sizeof和strlen的用法与区别

用法

sizeof和strlen都是用来求字符串的长度。

区别

  1. sizeof是一个单目运算符,不是函数!它的参数可以是数组、指针、数据类型名,函数等等。
    而strlen是一个函数,它的参数只能是数据!
    证明如下:

    代码如下:
    #include<stdio.h>
    #include<Windows.h>
    int main()
    {
    char sarr[] = “ILOVEC”;
    printf("%d\n", sizeof(char));
    printf("%d\n", sizeof(int));
    printf("%d\n", sizeof(short));
    printf("%d\n", sizeof(long));
    printf("%d\n", sizeof(long long));
    printf("%d\n", sizeof(float));
    printf("%d\n", sizeof(double));
    printf("%d\n", sizeof(sarr));//sizeof是一个单目操作符。
    printf("%d\n", strlen(sarr));//strlen是一个函数。
    int num = 10;
    int *p = #
    printf(“指针变量所占字节数为%d\n”, sizeof(*p));
    system(“pause”);
    }
    在这里插入图片描述

  2. 由运行结果可知,对于同一个数组sarr,用sizeof和strlen求出的字符串大小并不相同,sizeof求出的是7,slrlen求出的为6。
    原因是:sizeof求字节数的时候遇到结束字符\0也就是NULL才会停止,而这个\0也包含在其中,所以就是7。在这里插入图片描述
    再来看strlen,它是正确的求出字符串的大小,不包含结束字符\0,所以是6。

  3. 最后一点,sizeof和strlen的返回值(函数的返回值是指函数被调用之后,执行函数体中的代码所得到的结果,这个结果通过return语句返回,执行函数体中,一旦遇到return就立刻返回,不会执行后面的语句,从这个角度看,他还有强制结束函数执行的作用)。
    函数 strlen 返回的是一个类型为 size_t (即无符号整型)的值,而 size_t 类型绝不可能是负的。
    同时,对 sizeof 而言,因为缓冲区已经用已知字符串进行了初始化,其长度是固定的,所以 sizeof 在编译时计算缓冲区的长度。也正是由于在编译时计算,因此 sizeof 不能用来返回动态分配的内存空间的大小。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值