转自:https://blog.csdn.net/duan19920101/article/details/50606351

常见的计算长度的函数有两个,sizeof()和strlen(),但是,它们之间的差别还是很大的。

sizeof():主要负责计算数组的长度;

strlen():主要负责计算字符串的长度。

(1)sizeof():数组占用字节除以数组类型所占字节,结果为数组元素个数
       使用方法:sizeof(数组名)/ sizeof(数组类型名) 
(2)strlen():strlen,求字符串有效长度
方法:strlen(字符数组名)  //结果为字符数组有效字符长度,不包括末尾的'\0'

注意:当数组作为函数参数传递时,数组名代表的是数组的首址,而非数组内容,故无法使用sizeof和strlen;
所以,在传址时,应提供2个参数:1、数组名,代表数组首地址;2、数组元素个数,以便确定传递的次数。

下面来举个例子说明一下,不同情况下sizeof()的用法:

[cpp] view plaincopy
  1. #include<iostream>
  2. using namespace std;
  3. void Sum(int array[ ])
  4. {
  5. cout<<"sizeof(array)="<<sizeof(array)<<endl;
  6. }
  7. void main()
  8. {
  9. int a[ ]={1,2,3,4,5,6,7,8,9,10};
  10. cout<<"sizeof(a)="<<sizeof(a)<<endl;
  11. Sum(a);
  12. }

运算结果为:sizeof(a)=40   sizeof(array)=4

看到这样的结果,是不是感觉很奇怪?同样的数组,在不同的位置,输出却不一样。

分析:当数组作为函数参数传递时,数组名代表的是数组的首址,即指针,而非数组内容。如果传递整个数组,会导致栈溢出的。

所以在主函数中使用sizeof计算出的是准确的数组长度。而在调用函数中,由于传递的数组不再是数组本身,而是其地址,所以用sizeof计算出的,实际上是数组地址的长度,这时的sizeof(array),实际上是sizeof(int)。

因此,要想计算实际的数组长度,还是在主函数中求好,要是在调用时想用,可以作为参数传递过去嘛。

再来看看strlen()的用法:

若数组为存储字符串的字符数组,即以双引号括起来的字符串整体初始化的字符数组

例如:char a[]="abcdefg"或者char a[]={"abcdefg"}

则所求得的长度为字符数组的长度,而不是对应的字符串的长度,要求字符串的长度还需要减1。

即:字符串长度=字符数组长度-1。

原因:存储字符串的字符数组末尾有一个'\0'字符,需要去掉它。

对于char a[]="abcdefg"

sizeof(a)/sizeof(a[0])=8,要求字符串长度的话应该减1。

注意:sizeof()在计算时,包括末尾的'\0'

strlen(a)=7,表示的就是字符串的长度。

但对于char a[]={'a','b','c','d','e','f','g'}

sizeof(a)/sizeof(a[0])=7

部分内容参考:http://blog.sina.com.cn/s/blog_5fd837410100my8a.html

http://blog.csdn.net/rhzwan123/article/details/2362051

转载于:https://www.cnblogs.com/Baron-Lu/p/9058570.html

数组、字符串长度的计算(转)相关推荐

  1. 字符串长度的计算与字符串比较

    字符串长度的计算 (1)计算字符串长度时关键是要注意辨认转义字符:(2)一个转义字符总是以反斜杠开始,再加一个其他字符组成.所以,遇到反斜杠时要特别注意!!! 1.不带转义字符的字符串 如:" ...

  2. 数组、字符串长度的计算

    常见的计算长度的函数有两个,sizeof()和strlen(),但是,它们之间的差别还是很大的. sizeof():主要负责计算数组的长度: strlen():主要负责计算字符串的长度. (1)siz ...

  3. C语言求字符串数组的长度函数计算

    常见的计算长度的函数有两个,sizeof()和strlen(),但是,它们之间的差别还是很大的. sizeof():主要负责计算数组的长度: strlen():主要负责计算字符串的长度. (1)siz ...

  4. c/c++ 计算字符数组/字符串长度

    1.自定义函数求长度 2.使用strlen()函数 3.使用sizeof()操作符 4.使用length()函数 利用自定义函数的方法: int cont_str(char *s) {int i = ...

  5. 元素宽度固定,根据字符串长度,计算fontSize,缩小字号适配页面

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  6. 字符串长度 与数组长度

    对于定义 char str[] = "abc\000def\n"(注:其中0为数字零),求字符串str的长度len和数组str的大小size,len和size分别是: (2分)(2 ...

  7. java中的数组长度的计算

    讲到了java中数组的长度的计算,那就是少不了了那个java中的数组的定义. int a[]=new int[5]; String[]str=new String[]; String[]str=new ...

  8. php 字符串里面计算,php 计算字符串长度

    在项目的开发中,常常遇到要计算一个字符串的长度(中英文结合),由于产品要求不同,每个中文的长度要求也不一样. 解决utf-8编码下的字符串长度(可自定义每个中英文算几个字节) /** * 计算字符串长 ...

  9. C语言中数组长度的计算详解

    一. C语言中计算数组长度大小 C语言字符串长度的计算可以使用strlen(str); 但是对于数组长度的大小却没有相关函数可以使用: C语言数组长度的大小可以使用: int main() {int ...

最新文章

  1. android 读取asset下的文件注意事项
  2. SMS2003 SP3+SQL Server2000 SP4部署(下)
  3. keras中merge用法总结的言简意赅的
  4. Spring+SpringMVC+MyBatis深入学习及搭建(十四)——SpringMVC和MyBatis整合
  5. 可以给img元素设置背景图
  6. --eval mongo_这就是为什么您的read-eval-print-loop如此惊人的原因
  7. 解释汇编中的AUGW LABEL WORD、ADDW LABEL WORD
  8. EDA实验课课程笔记(三)——TCL脚本语言的学习1
  9. 工程从进场到竣工 资料报验的一般程序
  10. 铝板展开插件_铝板行业排料Rhino插件
  11. DNS和VIP的区别
  12. Python利用google翻译,翻译字幕文件!我想翻译日语!
  13. QQ互联本地测试【QQ互联第一步】
  14. fullCalendar日程表在Vue项目中的应用
  15. C语言计算内部回报率(或名内部收益率)(IRR)
  16. 「MBR」- 主引导记录(Master Boot Record) @20210315
  17. 用Mybatis实现添加用户
  18. 如果一个数等于它的因子之和,则称该数为“完数”(或“完全数”)。例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。编程找出1000之内的所有完数。
  19. 解密Google Deepmind AlphaGo围棋算法:真人工智能来自于哪里?
  20. 通过Android系统日志监听程序启动事件

热门文章

  1. 【web组件库系列】纯CSS实现典型网页数据分页器
  2. 软件交接需要交接哪些内容_从代理记账公司交接,需要交接哪些财务资料?
  3. c++ 方向_物理微课揭秘摩擦力的方向
  4. python+Treelite:Sklearn树模型训练迁移到c、java部署
  5. 不好意思昨天断更了,今天聊聊创业
  6. 机器学习【四】决策树
  7. 快轮天才发明家刘峰,上榜福布斯2017年亚洲人物
  8. Android studio 如何导入并引用Library工程
  9. 微信小程序中多个button/view组件中进行切换时改变样式
  10. C++ 中的动态库和静态库(Windows)