sizeof 跟 strlen 区别

区别一:

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

strlen是函数,sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。


eg:

char *s = ”asasas“;

sizeof(char) == 1

strlen(s) == 6



区别二:

sizeof来返回类型以及静态分配的对象、结构或数组所占的空间,返回值跟对象、结构、数组所存储的内容没有关系。

strlen返回字符串的长度,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL。返回的长度大小不包括NULL。


eg:

char s [] = {'1','2','3','4','5'};

sizeof(s) == 6  sizeof计算的是s数组的实际内存大小,s由1-5和‘/0’组成。sizeof不管内容,只管这个数组占用的空间

strlen(s) == 5   strlen只算字符串的长度,且不包含‘/0’


char str[20]="0123456789"; 


strlen(str) == 10; 


sizeof(str) == 20;



注:

数组作为参数传给函数时传的是指针而不是数组,传递的是数组的首地址, 
如: 
fun(char [8]) 
fun(char []) 
都等价于 fun(char *) 


在C++里参数传递数组永远都是传递指向数组首元素的指针,编译器不知道数组的大小 
如果想在函数内知道数组的大小, 需要这样做: 
进入函数后用memcpy拷贝出来,长度由另一个形参传进去 


fun(unsiged char *p1, int len) 

unsigned char* buf = new unsigned char[len+1] 
memcpy(buf, p1, len); 
}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值