淘宝网面试题

[复制链接]
 楼主| 秋天落叶 发表于 2012-5-7 19:03 | 显示全部楼层 |阅读模式
让我写出atol的实现代码,我记得微软的源码,当场写出来了,如下:
long __cdecl atol(
  const char *nptr
  )
{
  int c; /* current char */
  long total; /* current total */
  int sign; /* if '-', then negative, otherwise positive */

  /* skip whitespace */
  while ( isspace((int)(unsigned char)*nptr) )
  ++nptr;

  c = (int)(unsigned char)*nptr++; sign = c; /* save sign indication */
  if (c == '-' || c == '+')
  c = (int)(unsigned char)*nptr++; /* skip sign */

  total = 0;

  while (isdigit(c)) {
  total = 10 * total + (c - '0'); /* accumulate digit */
  c = (int)(unsigned char)*nptr++; /* get next char */
  }

  if (sign == '-')
  return -total;
  else
  return total; /* return result, negated if necessary */
}

接着面试官问我,为什么要在程序中做(int)(unsigned char)*nptr的强转?我没答出来,哪位能说说为什么要强转啊????
baidudz 发表于 2012-5-7 19:09 | 显示全部楼层
必须是int,或是无符号性,因为字符有可能超过256
yybj 发表于 2012-5-7 19:22 | 显示全部楼层
LZ居然还能记住代码
xsgy123 发表于 2012-5-7 20:51 | 显示全部楼层
选变成一个字节,然后把这个字节用INT表示出来
关小波522 发表于 2012-5-8 16:52 | 显示全部楼层
又出了个淘宝网的面试题,如今是面试题满天飞啊。
dfsa 发表于 2012-5-8 18:27 | 显示全部楼层
比较基础的面试题
火箭球迷 发表于 2012-5-8 18:35 | 显示全部楼层
这种源码LZ居然也能背下来,**力不错
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:落叶很美

138

主题

3044

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部
个人签名:落叶很美

138

主题

3044

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部