C编程:将getchar存储为char数组

C编程:将getchar存储为char数组,c,arrays,int,type-conversion,C,Arrays,Int,Type Conversion,我正在编写一个程序,该程序接收用户的输入,并将其存储为一个数字字符串(假设没有错误的输入),然后将该字符字符串/数组转换回整数。我意识到我最初可以将输入存储为整数,但我正在尝试一些转换方法 目前,我的错误涉及函数atoi(),它接收到一条“冲突类型”消息 #include <stdio.h> #include <stdlib.h> int atoi(char s[]) { int i, n; n = 0; for (i = 0; s[i] &g

我正在编写一个程序,该程序接收用户的输入,并将其存储为一个数字字符串(假设没有错误的输入),然后将该字符字符串/数组转换回整数。我意识到我最初可以将输入存储为整数,但我正在尝试一些转换方法

目前,我的错误涉及函数atoi(),它接收到一条“冲突类型”消息

#include <stdio.h>
#include <stdlib.h>

int atoi(char s[])
{
    int i, n;

    n = 0;
    for (i = 0; s[i] >= '0' && s[i] <= '9'; ++i)
    {
        n = 10 * n + (s[i] - '0');
    }
    return n;
}

int main(void)
{
    char str[5];
    int c, i;

    printf("Please enter a number");
    for (i = 0; (c = getchar()) != '\n'; ++i)
    {
        str[i] = c;
    }
    printf("%d", atoi(str));
    return EXIT_SUCCESS;
}

atoi()
是否在标准库中
#include
将函数名更改为其他名称

atoi()
是否在标准库中
#include
将函数名更改为其他名称

我看不到您在任何地方终止字符串。字符串后面的随机内存可能只包含合法数字。此外,如果用户输入的数字超过5位,则可能会出错。类型冲突错误表示您对
atoi
有多个定义。atoi()是包含在其中一个头文件中的原型函数。您的实现具有不同的原型。这是一个很好的理由,可以用不同的名称来调用那些“系统”函数。例如,如果您将其命名为“myAtoi()”,问题就会消失。我看不到您在任何地方终止字符串。字符串后面的随机内存可能只包含合法数字。此外,如果用户输入的数字超过5位,则可能会出错。类型冲突错误表示您对
atoi
有多个定义。atoi()是包含在其中一个头文件中的原型函数。您的实现具有不同的原型。这是一个很好的理由,可以用不同的名称来调用那些“系统”函数。例如,如果您将其命名为“myAtoi()”,问题就会消失。
gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/Chapter2.d" -MT"src/Chapter2.d" -o "src/Chapter2.o" "../src/Chapter2.c"
../src/Chapter2.c:50:5: error: conflicting types for ‘atoi’
 int atoi(char s[])