我正在尝试创建自己的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;
}
Run Code Online (Sandbox Code Playgroud)
你要声明一个数组char *,即一个字符串数组,而不是一个字符串.你可能想要:
char number[MAXSIZE];
Run Code Online (Sandbox Code Playgroud)你的scanf格式字符串是错误的.如果你想读一个字符串,你应该使用%s. %c只读取一个字符.
您的scanf参数是错误的 - 传递number自己(或者&number[0]如果您愿意),而不是&number.
您传递给的参数atoi_me是错误的.称之为number(或等效&number[0]),而不是*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;
}
Run Code Online (Sandbox Code Playgroud)
编辑说明:你有一个潜在的缓冲区溢出scanf线.你最好使用这样的功能fgets(3),以便轻松防范这类问题.
atoi(3)传统上也支持负数(带前导-)和+正数的可选前导,这是你的实现无法处理的.