今天群里jason哥们,发了一个编程改错题目,群里几众哥们一起讨论了下,最后看了答案还是有些失望。改错题目还是很有难度的。
1: class User {
2: char* m_name;3: public:
4: User(char* name)
5: {
6: m_name = new char[strlen(name)];
7: strcpy(m_name, name);
8: }
9: ~User()
10: {
11: if(m_name)
12: {
13: delete [] m_name;
14: m_name = NULL;
15: }
16: }
17: char* getName() const { return m_name; }
18:};
19:const string& GetName(User user)
20:{
21: string tip;
22: tip = "name:";
23: tip += user.getName();
24: return tip;
25:}
26:void main()
27:{
28: User user("abcd");
29: const string& tip = GetName(user);
30: cout << tip << endl;
31:}
正确答案:
第6行: m_name = new char[strlen(name)];
改成: m_name = new char[strlen(name)+1];
修改理由: strlen不计算字符串末尾的’\0’,因而在申请内存空间时要加1;
第19行: const string& GetName(User user)
改成:const string GetName(User user)
修改理由:第24行返回值为函数的局部变量tip不能作为引用返回值;
第26行 :void mian()
改成:int main()
修改理由:标准C++要求main()返回值必须为int
第29行: const string& tip = GetName(user);
改成: const string tip = GetName(user);
修改理由:由于第19行函数GetName的定义做了修改,在实际调用时也要随之修改;
第31行:}
改成: return 0;}
修改理由:main函数返回0表示程序正确运行。