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 不能用来返回动态分配的内存空间的大小。

猜你喜欢

转载自blog.csdn.net/Zhou000815/article/details/109004681