百度开发工程师的面试题(导航部门)

1. 程序改错题:

#include "string.h"
#define TONUM(x) x - '0'

int matoi(char* p) 
{
    int i ;
    int res; 
    for (i = 0; i < strlen(p);i++)
    {
        res = res * 10 + TONUM(p[i]); 
    }
    return res;        //容易溢出
}

//首先理解本题目的愿意,即本题目是将用字符串表示的整数转换成真正的字符串

总共错误有3处

错误1:字符串没有做合法性检验,非空,只有数字等;

错误2:res局部变量没有初始化,导致计算溢出;

错误3:没有考虑大数超过INT数值的范围

错误4:没有考虑负数的可能性---面试时没有考虑到

修改结果如下(不考虑负数):

#include "string.h"
#define TONUM(x) x - '0'

int matoi(char* p) //未检查p的合法性
{

    int i ;
    int res = 0; //错误1没有初始化
    if (NULL == p)return -1;
    if (p[0] == '0')return -1;
    for (i = 0; i < strlen(p);i&
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值