GESP 三级 · GESP 202306 C++ 三级 第 5 题

选择题 · 答案 C

← 整套速查表 GESP 三级 全部真题

题目

如果字符串定义为 char str[] = "Hello";,则字符数组 str 的长度为( )。

答案:C

解题思维

这题其实就考一个死规则:C++里字符串字面量在内存里会自动补个\0,所以数字符加一。看到"Hello"先数5个字母,再想下它后面一定藏着个不可见的null,直接5+1=6。

常见错误

最容易栽跟头就是只数看得见的字母,选B。因为平时大家习惯用length()或者strlen(),它们都不算\0,但数组长度是实实在在占内存的,多占一个。还有人选D,纯粹是瞎蒙或者把字符数跟字节数搞混了,其实char默认就是1字节,这里没陷阱。

详细解析(节选)

【考点】字符数组长度计算|C++字符串存储机制|null终结符

考纲定位:这道题放在GESP三级"编程基础"里,命题人就是盯着初学者对C++字符串底层存储的盲区下手——很多人只数看得见的字符,却忘了内存末尾必须塞个null终结符(\0)。

解题思维:拿到char str[] = "Hello";,第一步先数"Hello"里有5个可见字符。第二步马上反应过来,C++里任何字符串字面量在内存中都会自动追加一个\0,所以数组总长度=5+1=6。通法:任何C++字符串字面量在内存中都会追加\0,所以字符数组长度=字面量字符数+1。

陷阱拆解:B项是90%考生会选的陷阱——把字符串长度当成数组长度;D项属于随机猜数字的干扰项。如果你只背结论"Hello长度是5"而不理解字符串存储机制,就会掉进这个坑。特别注意,这里不是让求strlen("Hello"),而是求数组长度,多占的那个\0必须算进去。

反命题思维:若把题干改为"字符串str.length()的值是多少",答案就变成5——这里的核心区分点是:数组长度包含null终结符,而字符串长度方法不计入它。

考频趋势:复合类型在题库里共考过146题,覆盖7个考试级别,逐年分布:2023年21题、2024年42题、2025年47题、2026年27题、null年9题;分赛事:GESP五级52题、GESP三级22题、GESP七级21题、GESP六级21题、GESP八级16题、GESP四级12题、CSP入门级2题。一维数组更是高频考点,题库共考过224题,覆盖9个考试级别,逐年分布:2008年3题、2009年5题、2012年1题、2013年2题、2015年1题、2016年2题、2017年1题、2019年2题、2021年1题、2022年1题、2023年27题、2024年48题、2025年55题、2026年59题、null年16题;分赛事:GESP五级59题、GESP四级42题、GESP三级32题、GESP六级26题、GESP七级25题、GESP八级19题、NOIP提高组初赛10题、CSP入门级6题、NOIP普及组初赛5题。

预测:从数据看,2026年复合类型和一维数组的考频都达到了近年峰值(分别为27题和59题),且GESP三级在一维数组类别中占比32题,说明该级别对基础数组概念的考察非常密集。未来命题大概率会继续在"字符串字面量与数组长度"这类概念辨析上挖坑,尤其是结合sizeof或strlen的对比题,考生需时刻警惕\0的存在。暂无足够依据预测具体新题型,但建议重点复习字符串存储细节。

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断