c/c++中获取字符串长度。有以下函数:size()、sizeof() 、strlen()、str.length();

一、数组或字符串的长度:sizeof()、strlen()
1、sizeof():返回所占总空间的字节数
(1)、对于整型字符型数组
(2)、对于整型或字符型指针
2、strlen():返回字符数组或字符串所占的字节数
(1)、针对字符数组
(2)、针对字符指针

sizeof(...)是运算符,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。

strlen(...)是函数,要在运行时才能计算。参数必须是字符型指针(char*)。当数组名作为参数传入时,实际上数组就退化成指针了。它的功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符'\0'。返回的长度大小不包括'\0'。

strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到'\0'停止。

c/c++ strlen(str)和str.length()和str.size()都可以求字符串长度。
其中str.length()和str.size()是用于求string类对象的成员函数
strlen(str)是用于求字符数组的长度,其参数是char*。

举例:

1)char* ss = "0123456789";

sizeof(ss)为4,ss是指向字符串常量的字符指针,sizeof 获得的是指针所占的空间,则为4
sizeof(*ss)为1,*ss是第一个char字符,则为1

2)char ss[] = "0123456789";

sizeof(ss)为11,ss是数组,计算到'\0'位置,因此是(10+1)
sizeof(*ss)为1,*ss是第一个字符

3)char ss[100] = "0123456789";

sizeof(ss)为100,ss表示在内存中预分配的大小,100*1
strlen(ss)为10,它的内部实现用一个循环计算字符串的长度,直到'\0'为止。

4)int ss[100] = "0123456789";

sizeof(ss)为400,ss表示在内存中预分配的大小,100*4
strlen(ss)错误,strlen参数只能是char*,且必须是以'\0'结尾

5)char[] a={'a','b','c'};
sizeof(a)的值应该为3。

char[] b={"abc"};
sizeof(b)的值应该是4。

若string str={'a','b','c','\0','X'};
那么sizeof(str)为5,strlen(str)为3。

sizeof()、strlen()两者区别:
1)sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。 
该类型保证能容纳实现所建立的最大对象的字节大小。

2)sizeof是运算符,strlen是函数。

3)sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。 
sizeof还可以用函数做参数,比如: 
short f(); 
printf("%d\n", sizeof(f())); 
输出的结果是sizeof(short),即2。

4)数组做sizeof的参数不退化,传递给strlen就退化为指针了。

5)大部分编译程序 在编译的时候就把sizeof计算过了 是类型或是变量的长度。这就是sizeof(x)可以用来定义数组维数的原因 
char str[20]="0123456789"; 
int a=strlen(str); //a=10; 
int b=sizeof(str); //而b=20;

6)strlen的结果要在运行的时候才能计算出来,用来计算字符串的长度,不是类型占内存的大小。

7)sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。这是因为sizeof是个操作符不是个函数。

8)当使用了一个结构类型或变量时, sizeof 返回实际的大小, 当使用一静态地空间数组, sizeof 返回全部数组的尺寸。 sizeof 操作符不能返回被动态分配的数组或外部的数组的尺寸

二、string中length()和size()

c++中的size()和length()没有区别

如:

string str="0123456789";
cout <<"str.length()="<<str.length()<<endl;//结果为10
cout <<"str.size()="<<str.size()<<endl;//结果为10

为了兼容,这两个函数一样。 length()是因为沿用C语言的习惯而保留下来的,string类最初只有length(),引入STL之后,为了兼容又加入了size(),它是作为STL容器的属性存在的,便于符合STL的接口规则,以便用于STL的算法。 string类的size()/length()方法返回的是字节数,不管是否有汉字。

作者:zqifa

出处:https://www.l1mn.com

c/c++中sizeof()、strlen()、length()、size()详解和区别相关推荐

  1. java .size,Java中length,length(),size()详解及区别

    Java中length,length(),size()区别 length属性:用于获取数组长度. eg: int ar[] = new int{1,2,3} /** * 数组用length属性取得长度 ...

  2. length,length(),size()详解及区别

    length属性:用于获取数组长度. int ar[] = new int{1,2,3}/** * 数组用length属性取得长度 */int lenAr = ar.length;//此处lenAr= ...

  3. python的sort方法是哪种_python中的sort方法使用详解

    Python中的sort()方法用于数组排序,本文以实例形式对此加以详细说明: 一.基本形式列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可 ...

  4. java中迭代器要导包吗_java 中迭代器的使用方法详解

    java 中迭代器的使用方法详解 前言: 迭代器模式将一个集合给封装起来,主要是为用户提供了一种遍历其内部元素的方式.迭代器模式有两个优点:①提供给用户一个遍历的方式,而没有暴露其内部实现细节:②把元 ...

  5. python波形图librosa_对python中Librosa的mfcc步骤详解

    对python中Librosa的mfcc步骤详解 发布时间:2020-10-18 23:55:35 来源:脚本之家 阅读:71 作者:qq_39239990 1.对语音数据归一化 如16000hz的数 ...

  6. python中label有什么用_对Python中TKinter模块中的Label组件实例详解

    Python2.7.4 OS-W7x86 1. 简介 Label用于在指定的窗口中显示文本和图像.最终呈现出的Label是由背景和前景叠加构成的内容. Label组件定义函数:Label(master ...

  7. Linux中/proc目录下文件详解

    Linux中/proc目录下文件详解(一) 声明:可以自由转载本文,但请务必保留本文的完整性. 作者:张子坚 email:zhangzijian@163.com 说明:本文所涉及示例均在fedora ...

  8. python的执行过程_在交互式环境中执行Python程序过程详解

    前言 相信接触过Python的伙伴们都知道运行Python脚本程序的方式有多种,目前主要的方式有:交互式环境运行.命令行窗口运行.开发工具上运行等,其中在不同的操作平台上还互不相同.今天,小编讲些Py ...

  9. python中subplot是什么意思_python matplotlib中的subplot函数使用详解

    python里面的matplotlib.pylot是大家比较常用的,功能也还不错的一个包.基本框架比较简单,但是做一个功能完善且比较好看整洁的图,免不了要网上查找一些函数.于是,为了节省时间,可以一劳 ...

最新文章

  1. 偷看日历?9款 APP 涉嫌过度获取权限
  2. 分享5个有趣的 JavaScript 代码片段
  3. 字符串作为freemarker模板的简单实现例子
  4. 意料之外,也是情理之中 - 我的自由职业之旅
  5. python memory usage_Python Pandas Index.memory_usage()用法及代码示例
  6. main函数的参数argc和argv
  7. h5封装去底部_干货分享 | 一步一步教你在SpringBoot中集成微信支付H5支付
  8. Python pip使用国内镜像
  9. 手机浏览器html5游戏,移动浏览器都爱 HTML5 ?
  10. [渝粤教育] 西北大学 仪器分析 参考 资料
  11. 《5》CentOS7.0+OpenStack+kvm云平台的部署—组态Horizon
  12. 我的2012移动开发年度总结——革命的一年
  13. oracle select机制_ORACLE的工作机制(转载)
  14. 爬虫实战 -- QQ音乐爬取全部歌曲
  15. 3dmm计算特征向量,c++读写txt和二进制记录
  16. 计算机博弈大赛源代码,2020计算机博弈大赛幻影围棋分组第一天 信息交互模块...
  17. 数据可视化 Echarts + 边框图片 + ES6拼接字符串
  18. Google十大高薪职位:首席软件工程师居首
  19. Thingsboard 简单教程:使用 ThingsBoard 查看物联网数据
  20. 数字逻辑:重要基础知识点整理(不定时更新)

热门文章

  1. 《Linux指令从入门到精通》——4.3 Linux下全屏幕文本编辑器的命令行方式
  2. python项目的QQ机器人使用及部署在腾讯云服务器
  3. 项目管理的10大知识领域之范围管理
  4. phpStrom 连接数据库时报错:Uncaught Error: Class ‘mysqli‘ not found in
  5. 马云泄露:2019年两大赚钱趋势,会成就普通人赚千万财富!
  6. 微信video 视频
  7. linux虚拟机和主机的文件拷贝
  8. while循环语句初学
  9. python应为缩进块_Python的缩进
  10. 区间dp,绝对值不等式