以下关于 C++ 中 string 类和字符数组(char[])的说法,错误的是( )。
答案D。字符数组'\0'(空字符,ASCII 0)和字符常量'0'(ASCII 48)完全不同。字符串结束符是\0。
定义二维字符数组时注意行列意义。char s[10][100]表示10个字符串各100字符。
【考点】字符串类特性|内存管理与长度获取|运算符重载语义
1. 🎯 考纲定位 本题考查《GESP 三级大纲》"C++ 高级编程"中字符串类与基础数组的对比,卡住大量考生对运算符重载与内存管理本质的区分——误以为所有类型都能用 == 比较内容。
2. 🧠 解题思维 看到选项先判断类型:string 是类,支持运算符重载;char[] 是数组,仅支持逐元素比较。逐项验证:A 对(= 对 string 重载,数组需 strcpy);B 对(length() 是成员函数,strlen() 是库函数);C 对(string 内部动态分配,自动扩展);D 错(数组用 == 比的是首地址,内容比较必须 strcmp())。
3. 🪤 陷阱拆解 A 陷阱:把 = 当成普通赋值,忽略类运算符重载;B 陷阱:混淆成员函数与全局函数;C 陷阱:忽略小字符串优化(SSO)但整体仍对;D 陷阱最阴险——string 重载了 ==,但数组没有,绝对化表述"都可以"直接暴露。不区分类型本质,死记结论必掉坑。
4. 🔄 反命题思维 若将 D 改为"string 可用 == 比内容,char[] 必须用 strcmp()",则正确。提示:遇到"都可以""都支持"的绝对表述,先问"类型是否重载该运算符?"或"是否支持对象比较?"