【问题标题】:C Programming: store getchar as a char arrayC 编程:将 getchar 存储为 char 数组
【发布时间】:2015-03-03 07:23:54
【问题描述】:

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

目前我的错误涉及 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;
}

这是错误代码:

调用:GCC C 编译器

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[])

【问题讨论】:

  • 我没有看到你在任何地方终止字符串。字符串后面的随机内存可能只包含合法数字。此外,如果用户输入的数字超过 5 位,您可能会出现段错误。
  • 冲突类型错误表明您对atoi 有多个定义。
  • atoi() 是您包含的一个头文件中的原型函数。您的实现具有不同的原型。这是使用与那些“系统”函数不同的名称来调用函数的一个很好的理由。例如,如果您将其命名为“myAtoi()”,问题就会消失。

标签: c arrays int type-conversion


【解决方案1】:

atoi() 在标准库中有#include&lt;stdlib.h&gt; 将您的函数名称更改为其他名称

【讨论】:

    猜你喜欢
    • 2017-12-21
    • 1970-01-01
    • 2021-08-20
    • 2017-10-08
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    相关资源
    最近更新 更多