创建atoi功能

Kry*_*ick 4 c function atoi

我正在尝试创建自己的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)

Car*_*rum 8

  1. 你要声明一个数组char *,即一个字符串数组,而不是一个字符串.你可能想要:

    char number[MAXSIZE];
    
    Run Code Online (Sandbox Code Playgroud)
  2. 你的scanf格式字符串是错误的.如果你想读一个字符串,你应该使用%s. %c只读取一个字符.

  3. 您的scanf参数是错误的 - 传递number自己(或者&number[0]如果您愿意),而不是&number.

  4. 您传递给的参数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)传统上也支持负数(带前导-)和+正数的可选前导,这是你的实现无法处理的.