sizeof和strlen的区别

作者:小知 发布时间:2017-07-26 分类:C++

     技术所限,难免错误,如有不对之处,敬请留言指正!



    平常在写C++程序的时候,经常会看到sizeofstrlen的使用,感觉分不清具体的区别,有时候容易混淆。今天来剖析一下两者的具体区别:

    先给出个引子,让大家有个感官的认识:

char s[10]="123";

此时sizeof(s)=10,strlen(s)=3;

sizeof的功能是:获得保证能容纳实现所建立的最大对象的字节大小。比如上面的字符串s最大容纳的字节数是10。

1:sizeof()是运算符,sizeof()的值在编译时已经计算好了,sizeof的值是无符号整型unsigned int,其括号里面的参数可以是数组、指针、类型、对象、函数等。

一:数组:char s[10]="abcde",sizeof(s)=10;

二:指针:char *s="abcde",sizeof(s)=4,因为存放一个地址需要4个字节;

三:类型:sizeof(int)=4;

四:对象:先看下面的代码:

class B
{
private:
int a;
};
B b;
cout << sizeof(b) << endl;

    此时sizeof(b)=4;因为类对象里面有一个成员而且该成员是int类型的;如果类B里面没有成员,每个实例在内存中都有一个独一无二的地址,为了达到这个目的,编译器往往会给一个空类隐含的加一个字节,故而此时sizeof(b)=1。

五:函数:先看下面的代码:

short f(); 
printf("%d\n", sizeof(f()));

   此时sizeof的参数是函数f()函数f()返回一个short int类型故而sizeof(f())=2;


2:strlen()是函数。必须加头文件#include<string.h>,而且strlen的参数是固定类型的,即strlen的参数只能是char*类型的,而且以'\0'做结尾,即strlen的参数必须是一个固定大小的字符串或者动态的有结尾的字符串,计算的结果是该字符串的长度。

    如果这样定义char *p,strlen(p),这样写是错误的,因为此时字符串p没有以'\0'结尾,要计算这个字符串长度首先得给出一个有结尾的字符串。但是sizeof(p)却可以,此时sizeof计算的是存放一个指针p所占的空间,一个指针占4个字节。

QQ截图20170727002640.png


本篇完。


呃 本文暂时没人评论 来添加一个吧

发表评论

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。