atoi的等效功能不起作用

时间:2016-02-18 14:26:56

标签: c

您好我正在尝试制作相当于atoi的功能。 1,我想看到转换正确,但事实并非如此。请你帮我弄清楚它为什么不起作用?

int atoi2(char *string)
 {
  int i,numar,aux,p[10]={48,49,50,51,52,53,54,55,56,57};
  while(*string!='\0')
  {
   aux=(int)*string;

   for(i=0;i<10;i++)
   {
       if(p[i]==aux)
       {
           numar=numar*10+i;
       }
   }
  string++;
}
return numar;
}

2 个答案:

答案 0 :(得分:1)

您忘记初始化numar。如果您没有将自动变量显式设置为某个值,则其值是未定义的,编译器可以执行任何喜欢的操作。要解决此问题,请将第三行更改为:

int i,numar=0,aux,p[10]={48,49,50,51,52,53,54,55,56,57};

答案 1 :(得分:1)

必须在使用本地变量之前对其进行初始化,这是不支付C语言所需内容的政策的一部分。

此外,在您的情况下不需要使用数组,因为如果您只是从ASCII值中减去48,则数字ASCII值是连续的,您的代码将是等效的。所以*string - '0' == i

int numar = 0;
while (*string != '\0') {
  numar = numar*10 + (*string - '0');
  ++string;
}