【发布时间】: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