GESP 三级 · GESP 202312 C++ 三级 第 7 题

选择题 · 答案 A

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

题目

执行下面 C++ 代码后输出的是()。

string str=("chen");
cout<<str[5]<<endl;
答案:A

解题思维

答案A。数组和位运算的代码追踪要特别小心:数组下标从0开始,位运算结果可能不直观。建议画图辅助。

常见错误

位运算追踪时建议把数字写成二进制形式再逐位计算。

详细解析(节选)

【考点】字符串索引访问|C++ std::string 特性|越界访问未定义行为

🎯 考纲定位:GESP 三级 C++ 大纲"字符串与数组"模块,考查 std::string 的索引访问规则。命题人设置此题,正是为了卡住大量考生对 C++ 字符串"0 起始"和"长度不足"的误判,他们习惯用 C 风格数组思维,把 str[5] 当成合法字符。

🧠 解题思维:数一下"chen"长度,4 个字符,索引 0-3 分别对应 c,h,e,n。str[5] 显然越界,C++ 标准规定访问越界是未定义行为,可能输出随机值、崩溃或看似空字符,但标准答案给的是"未知的数",因为实际运行结果不确定。

🪤 陷阱拆解:B 项是'n',对应 str[3],命题人故意把正确答案写在最后一个合法索引上,诱导考生数错;C 项'\0' 是混淆 C 与 C++ 概念,std::string 不自动填充空字符;D 项空格是看到越界就瞎猜,没有依据。最阴险的细节是"str[5]"这种越界访问,不检查长度,直接访问,命题人利用考生对数组和字符串的边界不敏感。

🔄 反命题思维:如果把 str 改成"chen "(多一个空格),长度变 5,str[5] 仍越界,还是未知;若改成 C 风格char s[]="chen"; cout<<s[5];同样越界。提醒:遇到这种题,先问"索引是否合法?越界后果是什么?"

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