c语言sizeof测量字符组长度,C语言中,当计算字符数组长度时,用sizeof 和strlen 的原理及两者的区别...

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有什么区别?

注意:大部分编译程序 在编译的时候就把sizeof计算过了 是类型或是变量的长度这就是sizeof(x)可以用来定义数组维数的原因 。

所以,sizeof 即使在字符数组没有终止符'/0' 的时候,也能够计算出数组“长度”的原因,但这里的“长度”实际上是:编译器分配给该数组变量的内存大小!

例如:char chs[] = {'a', 'c', '/0', 'z', '3','d'}; // sizeof(chs) = 6; 而strlen(chs) = 2.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/526406.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言百文百鸡问题答案,python_百文买百鸡问题

百文买百鸡问题-- 不定方程-- 公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,用100文钱买100只鸡,如何买?-- 列出方程式x y z 1005x 3y z/3 100如何用计算机来算?-- 计算机并不会消元法,但是…

C语言 输出重复序列的序号,如何在FASTA序列中找到反向重复模式?

我是Python和生物信息学的新手,但我正在通过rosalind.info网站学习两种方法.您可以使用后缀树执行此操作.后缀树(见http://en.wikipedia.org/wiki/Suffix_tree)是神奇的数据结构,它使生物信息学中的所有事情成为可能.您可以快速找到多个长序列中的公共子串.后缀树只需要线性时间…

大写汉字转阿拉伯数字c语言,阿拉伯数字转中文数字方法详解(C++实现)

阿拉伯数字与中文数字没有一一对应关系,不存在直接转换的公式化算法,因此需要根据两种数字体系的特点精心构造转换算法。中文计数有一个特点,就是“零”的使用变化多端。阿拉伯数字中数字的权位依靠数字在整个数字长度中的偏移位置确定&#…

android 自定义progressbar demo,Android 自定义进度条ColorfulProgressbar,原理简单、效果还行...

效果图:demo效果演示演示Demo特性与原生Progress相比,感觉更漂亮一点,可以显示进度值,背景凹凸感明显,进度条效果更加立体。原理说明额,挺简单的。不过感觉我的做法有点复杂了,我先自定义了一个…

android os自动安裝软件,[图]Bliss OS 12进入开发阶段:可在桌面设备上安装Android 10系统...

此外还对电池进行了优化,添加了额外的安全性选项和相关功能,支持大部分主流游戏手柄,兼容ARM / ARM64应用程序。目前Bliss OS 12已经进入早期开发阶段,有望让您在PC上运行最新的Android 10移动操作系统。Bliss OS开发人员说&#…

android安装eclipse插件,Android SDK安装及Eclipse插件安装.pdf

Android SDK 安装不 Eclipse 插件安装工具的下载开发 Android 需要用到的工具有:集成开发环境 Eclipse ,Android 的 SDK 以及Java SDKAndroid SDK 下载地址 :/sdk/index.html点击上图中的红色地址就可以下载Eclipse 下载地址:/dow…

android 添加随意拖动的桌面悬浮窗口,android 添加随意拖动的桌面悬浮窗口

用过新版本android 360手机助手都人都对 360中只在桌面显示一个小小悬浮窗口羡慕不已吧?其实实现这种功能,主要有两步:1.判断当前显示的是为桌面。这个内容我在前面的帖子里面已经有过介绍,如果还没看过的赶快稳步看一下哦。2.使用…

android+版本升级的时候会清楚数据马,android主进程销毁了,线程会不会也销毁?...

Android Activity 销毁后子线程会不会被GC回收曾想当然地认为页面被finish之后线程会被android 虚拟机的垃圾回收机制回收掉。于是用页面跳转做测试测试代码结果有点意外,页面被销毁后定时器依然在执行。退出应用定时器还在执行。UI线程被结束掉,UI线程里…

mate7安装android o,华为Mate7升级安卓6.0详细教程

来讲一下华为Mate7升级安卓6.0(EMUI4.0)M版本详细图文教程吧,新的一年了,大家都迫不及待的想升级一下EMUI4.0,但是很多朋友都不知道怎样来升级,下面刷机网小编就来给大家仔细说一说吧,教程都在下面己经整理好了&#x…

html自动图片尺寸,关于html:CSS背景图像适合宽度,高度应按比例自动缩放

我有body {background: url(images/background.svg);}期望的效果是该背景图像的宽度等于页面的宽度,高度变化以保持比例。 例如 如果原始图像恰好是100 * 200(任何单位)且正文宽度为600px,则背景图像最终应为1200px高。 如果调整窗口大小,高度…

html定位的所有属性,HTML CSS定位属性详解 嘿嘿嘿

定位属性:Position作用:检索或者设置元素的定位方式“(改变元素位置)定位的步骤:1.给元素添加position属性 证明该元素要做位置变2.确定参照物!(通过position的属性值来确定 )3.确定坐标 left right top bottomPosition的属性值&a…

html中表格与字对齐,html – 中心与表格单元格对齐

这是一个很好的起点。HTML:CSS:.containing-table {display: table;width: 100%;height: 400px; /* for demo only */border: 1px dotted blue;}.centre-align {padding: 10px;border: 1px dashed gray;display: table-cell;text-align: center;vertical…

postman响应html,Postman工具——请求与响应(示例代码)

两个内容: Request 请求和 Response 响应,下面就开始了。一、Request 请求Request 请求,我们只介绍常用的四种:GET、POST、PUT、DELETE,其他类型的就不展开介绍了。另外,我们今天测试的项目是基于 RESTful …

2021高考无准考证成绩查询,2021考研没有准考证号怎么查成绩

2021考研没有准考证号怎么查成绩2020-12-10 11:02:14文/徐克达考研初试结束后,大家最关心的就是成绩的事情了,那么考研没有准考证号怎么查成绩呢?下面是小编整理的详细内容,一起来看看吧!考研没有准考证号查成绩的方法…

c++ 如何确认网卡为无线网卡_笔记本无线网卡有哪几种 有必要升级吗

无线网卡是很多朋友购买笔记本时容易忽视的部分,相比较处理器、内存、显卡和硬盘,无线网卡几乎不可选,而且很少有厂商提到自家产品采用的无线网卡型号。大家可能遇到过这种情况:为什么手机可以连接到5Ghz,而自己的笔记…

计算机网络专业运动会入场式,运动会入场式解说词(精选10篇)

运动会入场式解说词(精选10篇)在学习、工作生活中,接触并使用解说词的人越来越多,解说词是依靠文字来对事物、事件或人物进行描述的口头说明解说的词。大家知道解说词的格式吗?以下是小编精心整理的运动会入场式解说词(精选10篇),…

gifcam使用缩小内存_Fedora 上的桌面环境内存占用测试 | Linux 中国

通常,根据功能、外观和其它品质,选择桌面是一件非常个人的偏好。但有时,你选择的桌面环境还会受到硬件限制。-- Troy DawsonFedora 中有 40 多种桌面环境(DE)。每种桌面环境都有自己的优点和缺点。通常,根据功能、外观和其它品质&…

优秀自我简介200字_全球战疫 翰墨传情——东方盛世杯网络公益书画展优秀作品【二】...

​本文纯手打原创,转发请标注出处!中国书画爱好者,是中华优秀传统文化的薪火传承者。他们用生命中最美好的时光与最深沉的情感,实践着伟大文化复兴而不自知。——书画家网经过评委的精心评选,“东方盛世杯”2020网络公…

html渐变编织背景,【报Bug】uniapp设置了css渐变背景色编译时会报错

详细问题描述css样式中设置了背景色的话在H5发行编译时会报错,不过在浏览器运行编译时未发生错误。错误日志:[HBuilder] 15:14:32.364 Module build failed (from ./node_modules/postcss-loader/src/index.js):[HBuilder] 15:14:32.365 TypeError: Cann…

fi sap 凭证冲销 稅_SAP 成本收集器与重复制造配置手册

1.检查产品成本收集器的评估变式OPN22.检查产品成本收集器的成本核算变式OKKN3.确定作业数量的成本核算变式4.内部作业估价的成本核算变式5.定义订单交货的货物接收评估6.定义利润分析码OKG17.定…