您好我正在尝试制作相当于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;
}
答案 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;
}