C/C++知识点之C语言中,当计算字符数组长度时,用sizeof 和strlen 的原理及两者的区别
小标 2018-08-27 来源 : 阅读 2249 评论 0

摘要:本文主要向大家介绍了C/C++知识点之C语言中,当计算字符数组长度时,用sizeof 和strlen 的原理及两者的区别,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了C/C++知识点之C语言中,当计算字符数组长度时,用sizeof 和strlen 的原理及两者的区别,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

字符数组的长度计算:必须以终止符’\0'作为边界,但对字符数组赋值时,有两种方式:

1: 定义时用字符初始化

(1)char chs[7] = {'a', 'c', '0', 'z', '3','d'}; // 长度为6

 上式等价于: (2)char chs[7] = {'a', 'c', '0', 'z', '3','d', '/0'}; // 长度为6

 也等价于: (3)char chs[] = {'a', 'c', '0', 'z', '3','d', '/0' }; // 长度为6

 

但不等价于: (4)char chs[] = {'a', 'c', '0', 'z', '3','d'}; // 长度未知,因为数组最后没有结束符'/0'

也不等价于: (5)char chs[6] = {'a', 'c', '0', 'z', '3','d'}// 长度未知,因为数组最后没有结束符'/0'

其中 :(4)和(5)也是等价的,但不应该在实际应用中出现,因为没有结束符的数组长度未知,容易出现数组越界,致使访问非法内存,造成不可预料的程序错误。

 

因为字符数组是C 语言的概念,可见,C 语言语法中并未保证 :字符数组的结尾一定有结束符,这就需要程序员自己采取措施,以保证在数组的最后一个元素为 '/0' 。

 

2: 用字符串对数组进行初始化





在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。字符串总是以'/0'作为串的结束符。因此当把一个字符串存入一个数组时,也把结束符'/0'存入数组,并以此作为该字符串是否结束的标志。有了'/0'标志后,就不必再用字符数组的长度来判断字符串的长度了。

C语言允许用字符串的方式对数组作初始化赋值。

例如:

    char c[]={'c', ' ','p','r','o','g','r','a','m'};

可写为:

        char c[]={"C program"};

    或去掉{}写为:

        char c[]="C program";

用字符串方式赋值比用字符逐个赋值要多占一个字节, 用于存放字符串结束标志'/0'。上面的数组c在内存中的实际存放情况为:

C   p r o g r a m /0

‘/0'是由C编译系统自动加上的。由于采用了‘/0'标志,所以在用字符串赋初值时一般无须指定数组的长度, 而由系统自行处理。

 

 

3. sizeof 和 strlen 的区别


  strlen只能用char*做参数,且该char数组必须是以''/0''结尾的。
 

 


 数组做sizeof的参数不退化,传递给strlen就退化为指针了。 
详细说明可参见: 百度知道: strlen和sizeof有什么区别?

//zhidao.baidu.com/question/12033577.html
注意:大部分编译程序 在编译的时候就把sizeof计算过了 是类型或是变量的长度这就是sizeof(x)可以用来定义数组维数的原因 。
所以,sizeof 即使在字符数组没有终止符'/0' 的时候,也能够计算出数组“长度”的原因,但这里的“长度”实际上是:编译器分配给该数组变量的内存大小!    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 2 不喜欢 | 0
看完这篇文章有何感觉?已经有2人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved