sizeof与strlen的区别

sizeof与strlen的区别:
   sizeof是关键字,求空间大小,sizeof(int)要加括号,参数为变量名可以不加括弧。编译时即计算好
  sizefo的参数为类型时,为类型所占空间大小,
参数为对象时为对象的实际占用空间大小,
参数为函数时为函数的返回类型所占空间大小。函数类型不能是void。
   strlen是函数,求字符串长度,参数一定要加括弧。运行时才能计算。
1、参数为字符串时
字符串中有空格,占一个字节

char str[] = "hello";
strlen(str)=5;
sizeof(str)=6;
   strlen计算字符串长度,以“\0”结束,不包括“\0”.
   sizeof计算空间大小,包括“\0”.
2、参数为数组
①、char str[10] = "hello";
strlen(str)=5;
sizeof(str)=10;
char str[10]所定义的数组空间大小确定。
②、char str[]={'h','e','l','l','o'};
    char str[]所定义的数组,其空间大小由所给的字符个数确定,strlen(str)为随机值,数组的这种定义方式是不会在数组之后加上“\0”的,因此字符串何时结束就不得而知了
    sizeof(str)=5求数组大小,用五个字符对数组进行初始化,空间大小为5个字节
③、char str[10]={'h','e','l','l','o'};
   strlen(str)=5数组空间大小确定,用五个字符初始化,不够用0填充,其实‘\0’本质就是数字0,所以字符后出现0,其字符串长度就确定了
sizeof(str)=10
3、‘\0’与 ‘0’
①、char str[]={'h','e','l','\0','l','o'};
   strlen(str)=3数组中出现‘\0’意味着字符串结束
   sizeof(str)=6
②、char str[]={'h','e','l','0','l','o'};
    strlen(str)=随机数,字符‘0’不等价于‘\0’不能确定字符串结束位置,
若用0替换‘0’,则strlen(str)=3,‘\0’起到了转义的作用,即不要把0看做字符0,而是转义为数字0.所以‘\0’与数字0等价,与字符‘0’不等价
    sizeof(str)为6
4、数组未初始化
①、void main()
   {cher str[10]}
字符串‘\0’出现位置不确定所以字符串长度为随机值,空间大小为10
②、char str[10];
void main()
{}
数组str定义为全局数组,局部数组未初始化,内部数据为随机值,全局数组未初始化时,其值用数字0填充,所以长度为0,大小为10

5、参数为指针
①、char *str="hello";
长度为字符串的长度,但大小不是字符串的长度,因为sizeof()计算的是类型的大小,指针大小为四个字节
②、char *str[3]={'hello','hello','hello'};
strlen(*str)=5求的是第一个字符串的长度,sizefo(str)求的不是指针大小,是一个数组大小,数组有三个元素,每个元素是一个字符指针,大小为12.

个人总结,仅供参考,欢迎讨论

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值