关闭

sizeof、strlen

570人阅读 评论(0) 收藏 举报
分类:
一、sizeof

        sizeof(...)是运算符,sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型,是以字节为单位进行计数的。所以位域成员不

能用sizeof进行计算参数可以是数组、指针、类型、对象、函数等。

       功能是:获得保证能容纳实现所建立的最大对象的字节大小。

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

空间,返回值跟对象、结构、数组所存储的内容没有关系。


        具体而言,当参数分别如下时,sizeof返回的值表示的含义如下:

数组——编译时分配的数组空间大小;

指针——存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该为4 字节byte);

类型——该类型所占的空间大小;

对象——对象的实际占用空间大小;

函数——函数的返回类型所占的空间大小。函数的返回类型不能是void。


例如:

char a[] = "hello world";
char *p = a;
cout<< sizeof(a) << endl; // 12 字节
cout<< sizeof(p) << endl; // 4 字节


注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。

void Func(char a[100])
{
cout<< sizeof(a) << endl; // 4 字节而不是 100 字节
}




二、strlen

头文件:string.h

函数: int strlen(char *s);

格式:strlen (字符数组名、指针,且必须是以'\0'结尾的

功能:计算字符串s的(unsigned int型)长度,不包括'\0'在内。


例如:

int ac[10];

cout<<sizeof(ac)<<endl;(结果是40  byte)

cout<<strlen(ac)<<endl; (ac相当于一个指针,但是strlen只能接受char*类型,所以编译时出错)


char aa[10]={'\0'}; 

cout<<strlen(aa)<<endl; //结果为0


class X{ int i; int j; char k;};X x;

cout<<sizeof(X)<<endl; 结果 12 ===》内存补齐

cout<<sizeof(x)<<endl; 结果 12 同上


char szPath[MAX_PATH]

如果在函数内这样定义,那么sizeof(szPath)将会是MAX_PATH,但是将szPath作为函数参数时,sizeof(szPath)却会是4(指针大小)


char ca1[] = {‘C’,'++' };

char ca2[] = {‘C’,'++' ,‘\0’};

          故strlen(ca1)的值未定义,而strlen(ca2)=2。



0
0
查看评论

sizeof与strlen的区别

char str[20]="0123456789"; int   a=strlen(str); /*a=10;strlen 计算字符串的长度,以为字符串结束标记。 int   b=sizeof(str); /*b=20;sizeof 计算...
  • 21aspnet
  • 21aspnet
  • 2007-03-24 16:24
  • 44567

关于 strlen 与 sizeof 的区别

关于 strlen 与 sizeof 的区别,我相信很多人都有所了解。以下我总结了几点关于strlen 与 sizeof 的区别和注意事项。 1. strlen 是函数,sizeof 是运算符。 2. strlen 测量的是字符的实际长度,以'\0' 结束。而sizeof 测量的是字...
  • zhengqijun_
  • zhengqijun_
  • 2016-07-03 14:23
  • 1534

C++中sizeof与strlen的区别

1.    Strlen 是函数,strlen(char*)函数求的是字符串的实际长度,直到遇到第一个'\0',然后就返回计数值,且不包括'\0',函数的返回值值在运行时确定。参数是指针或字符数组,当数组名作为参数传入时,实际上数组就退...
  • u012441543
  • u012441543
  • 2015-05-19 19:47
  • 517

VC++ sizeof和strlen之间的区别

VC++中sizeof和strlen之间的区别
  • Antares_SANTALEN
  • Antares_SANTALEN
  • 2016-10-26 10:38
  • 546

sizeof和strlen区别详解

"引自百度百科" strlen strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')。...
  • yangle4695
  • yangle4695
  • 2016-08-09 20:46
  • 2231

C语言中的strlen与sizeof的区别

sizeof与strlen是有着本质的区别,sizeof是求数据类型所占的空间大小,而strlen是求字符串的长度,字符串以/0结尾。区别如下: (1) sizeof是一个C语言中的一个单目运算符,而strlen是一个函数,用来计算字符串的长度。 (2)sizeof求的是数据类型所占空间...
  • Yelbosh
  • Yelbosh
  • 2013-10-12 19:04
  • 3508

C语言中sizeof和strlen的区别与联系

C语言中sizeof和strlen的区别与联系         在学习C语言的时候发现经常将sizeof和strlen弄混淆,今天有遇到这个问题,所以查了一些资料,将他们总结在下面,虽然不是很全,但已经可以通过他们之间的比较来区开...
  • zhanghao864442969
  • zhanghao864442969
  • 2015-09-08 23:39
  • 597

sizeof()、strlen()、string中length()和size()

1、sizeof     sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。     它的功能是:获得保证能容纳实现所建立...
  • dabusideqiang
  • dabusideqiang
  • 2014-04-21 10:25
  • 1448

[面试题]sizeof与strlen的区别

例题: constchar *p = "Hello World"; char p[] = "Hello World";分别求长度和所占用空间大小,有啥区别? 答:求长度都可以用strlen(p),求占内存空间大小第一个不能用sizeof,第二个可以用sizeo...
  • SunnyYoona
  • SunnyYoona
  • 2014-09-07 10:40
  • 3594

C++ sizeof 与 strlen 小结

1.sizeof 的适用场合 (1)sizeof的主要用途是与存储分配和I/O系统那样的例程进行通信; void *malloc(size_t size); size_t fread(void *ptr , size_t size , size_t nmemb , FILE *stream); (2...
  • u013630349
  • u013630349
  • 2015-08-12 17:52
  • 920
    个人资料
    • 访问:235370次
    • 积分:3822
    • 等级:
    • 排名:第9942名
    • 原创:131篇
    • 转载:1篇
    • 译文:0篇
    • 评论:59条
    博客专栏
    感谢打赏-支付宝二维码
    支付宝
    最新评论