zoukankan      html  css  js  c++  java
  • sizeof 与 strlen 的区别

    由于在项目中,经常需要判别变量、数组、字符串等字节长度,常常会用到sizeof 和 strlen, 有时候经常会弄混,故整理一下。

    1. sizeof :

    sizeof 运算符 返回一条表达式或一个类型名字所占的字节数。与众不同的一点是,sizeof 并不实际计算其运行对象的值。

    Sales_data data , *p;
    sizeof(Sales_data);//存储Sales_data类型的对象所占的空间大小
    sizeof(data);//同上
    sizeof(p);//指针所占的空间大小,如果是64位系统,则为8
    sizeof(*p);//p所指类型的空间大小,等价于 sizeof(Sales_data);sizeof(data)
    sizeof(data.revenue);//Sales_data的revenue成员对应类型的大小

    注意:由于 sizeof并不实际计算器运行对象的值,故对于sizeof(*p),即使p是一个无效的指针,也没关系,在sizeof的运算对象中解引用一个无效指针仍然是一种安全的行为。

    ·对char或者类型为char的表达式执行sizeof运算,结果为1
    ·对引用类型执行sizeof运算得到被引用对象所占空间的大小
    ·对指针执行sizeof运算得到指针本身所占空间的大小//64位:8;32位:4
    ·对解引用指针执行sizeof运算得到指针指向的对象所占空间的大小,指针不需有效
    ·对数组执行sizeof运算得到整个数组所占空间的大小。注意:sizeof运算不会把数组转换成指针来处理
    ·对string对象或vector对象执行sizeof运算值返回该类型固定部分的大小,不会计算对象的元素占用了多少空间
    char *abc = "123";
    char test[12]="123";
    char test1[]="123";
    cout<<sizeof(abc)<<endl;     //输出8    64位,所以是8 ,指针长度
    cout<<sizeof(test)<<endl;    //输出12    数组长度,12个字节
    cout << sizeof(test1)<<endl;  //输出4   数组长度,后面加上一个空字符,一共4个

    2. strlen

    这个函数是C语言下面的函数,所谓的C标准库String 函数。作用:返回字符串的长度,空字符不计算在内。

    char ca[] = {'C','+','+'};
    cout << strlen(ca) << endl;  // 错误     ca虽然是一个字符数组,但它不是以空字符作为结束的,有可能沿着ca在内存中的位置不断向前寻找,直到遇到空字符才停下来。

    传入strlen函数的指针必须指向以空字符作为结束的数组;同类的函数有 strcmp, strcat, strcpy

    char ca[] = {0x11,0x22,0x00,0x23};
    cout<<strlen(ca)<<endl; // 输出2,因为遇到 0x00空字符
  • 相关阅读:
    好的文章聚集地
    java连接mysql数据库8.0以上版本过程中遇到的坑
    Tomcat8.5安装与配置的坑
    用阿里fastJson解析Json字符串
    通过java代码HttpRequestUtil(服务器端)发送HTTP请求并解析
    Vue中美元$符号的意思
    java的jdk和jre区别
    java正则
    java8 四大核心函数式接口Function、Consumer、Supplier、Predicate(转载)
    SpringBoot:静态资源的访问和配置(转载)
  • 原文地址:https://www.cnblogs.com/ycbeginner/p/9961519.html
Copyright © 2011-2022 走看看