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&