面试改错题目

今天群里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表示程序正确运行。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值