C++定义字符数组
问: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结束符,⽽数组不需要!
什么是字符串?就是以双引号引起来的数据才叫字符串。字符数组可以存储字符串!
⽰例:
1char szbufA[5]="ABCD";
2//szbufA表达式的值:0x0035f9bc "ABCD"
3
4//szbufC[5]="ABCD1"; //编译报错 error C2440: “=”: ⽆法从“const char [6]”转换为“char”
5
6char 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
14int na = sizeof(szbufA);//na=5
15int naa = strlen(szbufA);//naa=4
16int nb = sizeof(szbufB);//nb=5
c 字符串转数组
17int 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'结束符)。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。