C语言中strlen和sizeof的用法区别

时间:2023-01-30 19:31:11

在工作中常常使用strlen和sizeof 来求字符数组的长度,但是这两者有什么细微的不同的?

 

1:strlen()和sizeof()的定义:

1.strlen()包含在#include <string.h>头文件中,strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')。

2.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。

2:两者的区别:

1.sizeof是取字节运算符(关键字),strlen是函数。

2.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以'\0'结尾的。sizeof还可以用函数做参数。例子如下

 1 #include "stdio.h"
 2 #include "stdlib.h"
 3 #include "string.h"
 4 
 5 int  function()
 6 {
 7     return 0;
 8 }
 9 
10 int main()
11 {
12     printf("sizeof(function()):%d\n", sizeof(function()));//函数做sizeof()参数
13     system("pause");
14 }

3.数组做sizeof的参数不退化,传递给strlen就退化为指针了。这句话的意思是当数组做strlen时,会发生数组退化现象,比如定义char buf[100]="121314";sizeof( buf)  buf不会退化为char *类型的指针。而strlen(buf),buf会退化成char *类型的指针。

int main()
{   

    char b[100] = "1123456789";

    printf("sizeof(b):%d\n", sizeof(b));//值为100
    printf("strlen(b):%d\n", strlen(b));//值为字符串长度

    system("pause");
        return 0;
}    
int  function(char b[])//先退化为指针,在调用sizeof 和 strlen。 strlen没有影响
{  
    printf("sizeof(b):%d\n", sizeof(b));//值为4
    printf("strlen(b):%d\n", strlen(b));//值为10
    return 0;
}

int main()
{   

    char b[100] = "1123456789";
    function(b);
    system("pause");
}

常用用法:sizeof()常常被使用来求解数组长度。  数组长度=sizeof(数组)/sizeof(数组单个元素)。