strlen和sizeof有什么区别?

2026年09月02日 23:12
有3个网友回答
网友(1):

strlen计算字符串的具体长度,sizeof计算声明后所占的内存数。

strlen与sizeof的区别:

strlen计算字符串的具体长度(只能是字符串),不包括字符串结束符。返回的是字符个数。

sizeof计算声明后所占的内存数(字节大小),不是实际长度。

sizeof是一个取字节运算符,而strlen是个函数。

sizeof的返回值=字符个数*字符所占的字节数,字符实际长度小于定义的长度,此时字符个数就等于定义的长度。若未给出定义的大小,分类讨论,对于字符串数组,字符大 小等于实际的字符个数+1;对于整型数组,字符个数为实际的字符个数。字符串每个字符占1个字节,整型数据每个字符占的字节数需根据系统的位数类确定,32位占4个字节。     

sizeof是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。

由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的空间,返回值跟对象、结构、数组所存储的内容没有关系。

strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')。C语言中判断数据类型或者表达式长度符;不是一个函数,字节数的计算在程序编译时进行,而不是在程序执行的过程中才计算出来。

网友(2):

strlen是指字节长度 sizeof指所占地址大小

网友(3):

1 ) sizeof 操作符的结果类型是 size_t ,它在头文件中 typedef 为 unsigned int 类型。 该类型保证能容纳实现所建立的最大对象的字节大小。 2 ) sizeof 是算符, strlen 是函数。 3 ) sizeof 可以用类型做参数, strlen 只能用 char* 做参数,且必须是以 ''\0'' 结尾的。 sizeof 还可以用函数做参数,比如: short f(); printf("%d\n", sizeof(f())); 输出的结果是 sizeof(short) ,即 2 。 4 )数组做 sizeof 的参数不退化,传递给 strlen 就退化为指针了。 5 )大部分编译程序在编译的时候就把 sizeof 计算过了 , 是类型或是变量的长度 , 这就是 sizeof(x) 可以用来定义数组维数的原因。 char str[20]="0123456789"; int a=strlen(str); //a=10; int b=sizeof(str); // 而 b=20; 6 ) strlen 的结果要在运行的时候才能计算出来,是用来计算字符串的长度,不是类型占内存的大小。 7 ) sizeof 后如果是类型必须加括弧,如果是变量名可以不加括弧。这是因为 sizeof 是个操作符不是个函数。 8 )当适用一个结构类型或变量时, sizeof 返回实际的大小;当适用一静态地空间数组, sizeof 归还全部数组的尺寸; sizeof 操作符不能返回动态地被分派了的数组或外部的数组的尺寸。 9 )数组作为参数传给函数时传的是指针而不是数组,传递的是数组的首地址