GESP编程等级认证C++三级7-字符、字符数组与字符串2

2.3 用字符串定义字符数组的好处

使用字符串定义字符数组需要额外考虑其末尾的“\0”,为什么还要使用这种看上去“麻烦”的方法呢?从图5所示的代码就能看出原因。

图5 用字符串定义字符数组好处的代码

从图5中可以看出,a4是用字符串进行初始化的字符数组,a7是直接初始化的字符数组。第10-11行代码分别打印a4和a7,代码运行效果如图6所示。

图6 代码运行效果

从图6中可以看出,使用字符串进行初始化的字符数组a4,能打印出正确值;而直接初始化的字符数组a7,打印出来许多乱码。其原因就在于a4包含了“\0”,cout执行到“\0”时,就会停止打印;而a7中不包含“\0”,cout会一直打印下去,直到遇到“\0”才停止,如图7和图8所示。

图7 数组a4在内存中的值

图8 数组a7在内存中的值

从图7中可以看到,a4包含0x00,也就是“\0”,图8中红框是数组a7的内容,但是其不包含0x00,此时cout会继续打印绿框中的内容,也就是图6中的乱码,直到打印到紫框中的0x00,cout才停止输出。

3 字符数组的长度

当字符数组用字符串初始化时,可以通过strlen()函数获取字符数组长度。

3.1 通过strlen()函数获取字符数组长度

通过strlen()函数获取字符数组长度时,是不算字符数组最后一个元素“\0”的,代码如图9所示。

图9 通过strlen()函数获取字符数组长度的代码

此时,程序的输出是5而不是6。

3.2 通过sizeof()获取字符数组长度

《GESP编程等级认证C++三级4-数组4》中提到,可以通过sizeof()获取数组中元素的个数,那么通过sizeof()获取字符数组长度的代码如图10所示。

图10 通过sizeof()获取字符数组长度的代码

此时程序的输出是6,也就是说,包含了数组末尾的“\0”。

4 真题解析

4.1 2024年12月选择题

本题正确答案是“A”(官方参考答案是“D”)。strlen()获取字符数组长度时,是不包含最后“0x00”的,需要注意的是,数组长度是要算上中间空格的。

4.2 2024年6月选择题

本题答案是“C”。使用字符串初始化字符数组时,数组的最后一个元素隐式地设置为0x00,因此str的长度是显式4加上隐式1,为5。

4.3 2024年6月判断题

本题答案是“错误”。字符常量’\0’确实是表示字符串的结束,其值为0x00;而字符常量’0’的值是0x30,因此两个常量不同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值