我正在尝试创建自己的 atoi 函数。通过以下代码,我得到的返回值为 0。无论我更改函数中的数字变量,我都会得到返回值。关于修改代码有什么建议吗?
//my atoi function
int atoi_me(char *numstring)
{
int number = 0;
while((*numstring >= '0') && (*numstring <= '9'))
{
number = (number * 10) + (*numstring - '0');
numstring++;
}
return number;
}
int main()
{
char *number[MAXSIZE];
int num;
printf("Please enter a number:\n");
scanf("%c", &number);
num = atoi_me(*number);
printf("%d", num);
return 0;
}
-
你正在声明一个数组char *
,即字符串数组,而不是单个字符串。您可能想要:
char number[MAXSIZE];
Your scanf
格式字符串错误。如果你想读取一个字符串,你应该使用%s
. %c
只读取一个字符。
Your scanf
参数错误-通过number
本身(或&number[0]
如果你愿意的话),而不是&number
.
您要传递给的参数atoi_me
是错的。调用它number
(或同等地&number[0]
), not *number
.
把所有这些放在一起,你应该有一个main
例行公事是这样的:
int main(void)
{
char number[MAXSIZE];
int num;
printf("Please enter a number: ");
scanf("%s", number);
num = atoi_me(number);
printf("%d\n", num);
return 0;
}
编者注:您有潜在的缓冲区溢出scanf
线。你最好使用像这样的函数fgets(3)这使得防范此类问题变得容易。
atoi(3)传统上也支持负数(带有前导-
)和一个可选的前导+
对于正数,您的实现无法处理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)