首页 > 编程语言 > 详细

C++定义字符数组

时间:2017-02-13 12:46:56      阅读:255      评论:0      收藏:0      [点我收藏+]

问: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结束符,而数组不需要!
什么是字符串?就是以双引号引起来的数据才叫字符串。字符数组可以存储字符串!

示例:

 1     char szbufA[5]="ABCD";
 2     //szbufA表达式的值:0x0035f9bc "ABCD"
 3 
 4     //szbufC[5]="ABCD1"; //编译报错 error C2440: “=”: 无法从“const char [6]”转换为“char”
 5     
 6     char szbufB[5];
 7     szbufB[0]=a;
 8     szbufB[1]=b;
 9     szbufB[2]=c;
10     szbufB[3]=d;
11     szbufB[4]=e;
12     //szbufB表达式的值:0x0035f9ac "abcde烫烫烫烫烫藺BCD"
13     
14     int na = sizeof(szbufA);//na=5
15     int naa = strlen(szbufA);//naa=4
16     int nb = sizeof(szbufB);//nb=5
17     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++定义字符数组

原文:http://www.cnblogs.com/lisuyun/p/6393198.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!