`
duoerbasilu
  • 浏览: 1482542 次
文章分类
社区版块
存档分类
最新评论

说明sizeof和strlen的区别

阅读更多

由以下几个例子来说明sizeof和strlen的区别

①char* ss="0123456789"

sizeof(ss)的结果是4,ss指向字符串常量的字符指针

sizeof(*ss)的结果是1,*ss是第一个字符

②char ss[]="0123445678";

sizeof(ss)的结果是11,ss是数组,计算到'\0'的位置,因此是10+1;

sizeof(*ss)的结果是1,*ss是第一个字符

③char ss[100]="0123456789";

sizeof(ss)的结果是100,ss表示在内存中预分频的大小,100*1

strlen(ss)的结果是10,它的内部是用一个循环计算字符串的长度的,直到遇到'\0'为止

④int ss[100]={0,1,2,3,4,5,6,7,8,9};

sizeof(ss)的结果是400 100*4

sttrlen(ss)错误,strlen的参数只能是char*,并且是以'\0'结尾

通过对sizeof和strlen的理解得出二者的区别如下:

①sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int 类型,该类型保证能容纳实现所建立的最大对象的字节大小

②sizeof是运算符,strlen是函数

③sizeof可以用类型作为参数,而strlen只能用char*做为参数,并且必须是'\0'作为结尾,sizeof还可以用函数作为参数比如:

short f();

cout<<sizeof(f());

④数组作为sizeof用做参数不退化,传递给strlen就退化为指针了

⑤大部分编译程序在编译的时候就把siseof计算过了,是类型或者变量的长度,这就是用sizeof(x)可以用来定义数组维数的原因

⑥strlen的结果要在运行的时候才能计算出来,用来计算字符串的程度,而不是类型所占的大小

⑦当使用了一个结构类型或者变量时候,sizeof返回实际的大小,当使用一个静态的空间数组时候,sizeof返回全部数组的尺寸

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics