【发布时间】:2014-02-18 16:59:30
【问题描述】:
我正在使用 atoi(argv[1]) 这是我的代码的 sn-p
void main(int argc, char* argv[])
{
int evenOrOdd = 0;
int inputtedNum = 0;
pid_t pid;
int i;
char buf[BUF_SIZE];
if (argc != 2)//make sure user has input correctly entered
{
printf("Please use input: ./a.out #\n");
}
else
{
inputtedNum = atoi(argv[1]);
if(inputtedNum < 0) //make sure number is positive
{
printf("Please use a positive number.\n");
return;
}
}
// ...
}
代码继续运行等等,但是当输入一些数字时,它有时会认为它们是负数。如果我输入 123456789 它将没有问题并正确运行程序。如果我输入 12345678910 它会认为该数字是负数。我是否在这里遇到了一些缓冲区错误,导致负标志失败?我不太确定如何解决它。
感谢所有帮助!
【问题讨论】:
-
12345678910超出了 int32_t 的范围。 -
您的整数很可能是 32 位,这仅允许它包含最多 2^31-1 的数字。
-
谢谢约阿希姆。原来这是我的最高数字。
-
用strtol来检查errno如果你要测试转换结果是否溢出。预计可以输入的范围是多少?