问:C++中定义字符型数组时'\0'是不是也占一位?是不是定义char a[5],只能有4个字符?那计算字符长度时又否忽略'\0'?

答:

C++中定义字符型数组时'\0'是不是也占一位?是不是定义char a[5],只能有4个字符,(是的,如果你把这个字符数组看成一个字符串的话,这里应该是最多4个字符,)
那计算字符长度时又否忽略'\0'? (是的)

解释:

定义char a[5],则说明,a是个字符数组,在内存中占五个字节空间
如果用a来存储字符串,则最多只能有4个有效字符,必须给\0留个空间。 计算a的长度与a的大小是不同的概念
a按字符串来算长度是从a这个地址开始,计数到\0字符,这之间的字符个数是字符串a的长度。
一般常用strlen()函数来获取字符串长度。
计算a的大小用sizeof命令,sizeof(a)得到的是a在内存中占的字节数! 字符串与字符数组不要混为一谈。它们相同在形式上,区别就在,字符串一定有\0结束符,而数组不需要!
什么是字符串?就是以双引号引起来的数据才叫字符串。字符数组可以存储字符串!

示例:

     char szbufA[]="ABCD";
//szbufA表达式的值:0x0035f9bc "ABCD" //szbufC[5]="ABCD1"; //编译报错 error C2440: “=”: 无法从“const char [6]”转换为“char” char szbufB[];
szbufB[]='a';
szbufB[]='b';
szbufB[]='c';
szbufB[]='d';
szbufB[]='e';
//szbufB表达式的值:0x0035f9ac "abcde烫烫烫烫烫藺BCD" int na = sizeof(szbufA);//na=5
int naa = strlen(szbufA);//naa=4
int nb = sizeof(szbufB);//nb=5
int nbb = strlen(szbufB);//nbb=20

从以上代码的1-12行代码中可以看出,定义字符数组时,使用字符串初始化只能使用长度为数组大小(n-1)的字符串。使用大于等于字符数组长度的字符串初始化会报错。

从以上代码第2、12和17的代码中可以看出,使用五个字符分别给szbufB字符数组赋值,导致szbufB数组没有'\0'结束符,szbufB数组的表达式值是错误的,szbufB的长度不是5,而是20了。

把szbufB字符数组拷贝到其他字符数组或者字符串地址时,拷贝的内容可能会出错。因为szbufB数组没有'\0'结束符。

总结:定义字符数组保存字符串时,字符数组大小= 字符串长度 + 1。sizeof数组名,是计算数组占用字节的大小。strlen数组名,是计算数组中字符串的长度(不包括'\0'结束符)。

 

C++定义字符数组的更多相关文章

  1. C 语言字符数组的定义与初始化

    1.字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素.char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y'} ...

  2. 字符数组char

     数组做sizeof的参数不退化,传递给strlen就退化为指针: #include<stdio.h> #include<stdlib.h> #include<strin ...

  3. c语言字符数组与字符串的使用详解

    转自:http://www.jb51.net/article/37456.htm 1.字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素.char str[10]={ ...

  4. c语言中的字符数组与字符串

    1.字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y ...

  5. C语言博客作业--字符数组

    一.PTA实验作业 题目1:统计一行文本的单词个数 1. 本题PTA提交列表 2. 设计思路 Begin 定义字符型变量ch,pre=' ': 定义整型变量count://用来记录单词个数 count ...

  6. c字符数组

    一.PTA实验作业 题目1:统计一行文本的单词个数 1. 本题PTA提交列表 2. 设计思路 定义一个长度为1000的字符数组str[1000] 在定义 i=0,cnt=0:cnt用来记录单词的个数 ...

  7. C语言---字符数组

    一.PTA实验作业 题目1:7-2 统计一行文本的单词个数 1. 本题PTA提交列表 2. 设计思路 定义循环变量i,j定义不为空格的字符数count,定义单词数number,i,j,count,nu ...

  8. c语言字符数组的初始化问题

    1.字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y ...

  9. C语言中整形数组、字符数组、字符串的区别

    一. 第一 整型数组的存放,数组最后是不加'\0'的,字符串会自动加上,因此存放字符的时候数组的大小要比实际字符的多一个 第二 整型数组 每一个单元是4个字节的,字符串是一个一个字符存放的,每个字符占 ...

随机推荐

  1. [原创]Java性能优化权威指南读书思维导图2

    [原创]Java性能优化权威指南读书思维导图2

  2. 系统wmiprvse.exe占用CPU非常高,求解决

    1.wmiprvse.exe是微软Windows操作系统的一部分.用于通过WinMgmt.exe程序处理WMI操作.文件位置有二处: C:\WINDOWS\system32\wbem\wmiprvse ...

  3. boost.property_tree解析xml的帮助类以及中文解析问题的解决(转)

    boost.property_tree可以用来解析xml和json文件,我主要用它来解析xml文件,它内部封装了号称最快的xml解析器rapid_xml,其解析效率还是很好的.但是在使用过程中却发现各 ...

  4. 发布库到仓库 maven jcenter JitPack MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  5. mac上配置mysql与redis server,并结合Pydev准备某爬虫环境

    mysql下安装mysql server mysql下安装redis server:https://www.jianshu.com/p/3bdfda703552 mac下安装配置redis:https ...

  6. llvm pass

    https://polly.llvm.org/docs/Architecture.html#polly-in-the-llvm-pass-pipeline

  7. iOS 创建一个App目录结构

    Class:存放的是App中所有的模块功能 Base:存放一些基类,比如BaseViewController,BaseModel等,共性直接在基类中去修改 Vendor:三方,因为我的项目中使用coc ...

  8. 【SqlServer】解析SqlServer的分页

    方式1: 假设页数是10,现在要拿出第5页的内容,查询语句如下: --10代表分页的大小 * from test where id not in ( --40是这么计算出来的:10*(5-1) id ...

  9. 理顺FFT

    DFT(Discrete Fourier Transform):离散傅立叶变换 直观的计算DFT算法复杂度为O(N*N). FFT(Fast Fourier Transformation):快速傅立叶 ...

  10. IOS开发系列之阿堂教程:玩转IPhone客户端和Web服务端交互(客户端)实践

    说到ios的应用开发,我们不能不提到web server服务端,如果没有服务端的支持,ios应用开发就没有多大意义了,因为从事过手机开发的朋友都知道(Android也一样),大量复杂业务的处理和数据库 ...