黑马程序员技术交流社区

标题: strlen 和 sizeof 有何区别? [打印本页]

作者: lewisen    时间: 2014-4-19 17:09
标题: strlen 和 sizeof 有何区别?
本帖最后由 lewisen 于 2014-4-29 19:15 编辑

#include <stdio.h>
#include <string.h>
int main()
{
    char st[20] = "hello\0\t\\";
    printf("%d %d\n",strlen(st),sizeof(st));
    return 0;
}
为何输出两数值不是相同的?


作者: 愿我能    时间: 2014-4-19 18:08
本帖最后由 愿我能 于 2014-4-19 18:09 编辑

sizeof(...)是运算符,而不是一个函数。strlen(...)是函数,要在运行时才能计算 参数可以是数组、指针、类型、对象、函数等。。参数必须是字符型指针(char*),计算到/0为止,所以字符串必须以/0结尾,不然会一直计算到/0
作者: 微尘•逐梦    时间: 2014-4-19 18:09
strlen( )这个函数是用来计算字符串长度的,在计算字符串时遇到‘\0’就停止计数,所以strlen(st)的返回值是5,sizeof( )是用来计算数据类型长度的,一个字符占一个字节char[20]占20个字节,素以sizeof(st)的返回值是20。
作者: 悟中生有    时间: 2014-4-19 18:13
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main()
  4. {
  5.     char st[20] = "hello\0\t\\";
  6.     printf("%ld---- %ld",strlen(st),sizeof(st)/sizeof(char));
  7.     return 0;
  8.     //sizeof:是数组长度的计算sizeof(数组名)/sizeof(数组类型) = 数组的长度
  9.     //strlen:计算的是字符串的长度
  10. }
复制代码

作者: lewisen    时间: 2014-4-19 19:41
多谢各位解答。
作者: 杨勇    时间: 2014-4-19 20:05
strlen( )是函数,用来计算字符串的字符数,不包括最后的‘\0’,且需要考虑汉子等情况,汉字占三个字符。sizeof()是一个关键字,用来计算变量和类型所占的字节数。
作者: 星河鹭起    时间: 2014-4-19 20:29
strlen是读取字符串的长度,遇到\0后会停止输出,而sizeof是计算存入内存的字节数,\0的一样会读取字节。

char st[20] = "hello\0\t\\";
因为strlen遇到\0会停止,因此strlen读取的是hello的长度,就是5.
而sizeof读取所有的,就是hello\0\t\\   结果为8,\\代表转义\,占用了一个字节长度
作者: pprgra56    时间: 2014-4-19 20:53
strlen() 读字符串长度,遇到\0停止,
而sizeof是计算字符串的字节数  
作者: m573555543    时间: 2014-4-19 21:37
使用strlen函数要求字符串必须是以''\0''结尾的。strlen返回它的长度但不包括‘\0’

2.sizeof可用于数据类型,使用形式:sizeof(type),数据类型必须用括号括住,如sizeof(int)。也可用于变量:sizeof(var_name)或sizeof var_name 

变量名可以不用括号括住。如sizeof (var_name),sizeof var_name等都是正确形式。 

注意:sizeof操作符不能用于函数类型,不完全类型或位字段。不完全类型指具有未知存储大小的数据类型,如未知存储大小的数组类型、未知内容的结构或联合类型、void类型等。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2