执行下面 C++ 代码后输出的是()。
string str=("chen");
cout<<str[5]<<endl;答案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];同样越界。提醒:遇到这种题,先问"索引是否合法?越界后果是什么?"