【发布时间】:2019-10-02 12:34:30
【问题描述】:
error image我试图编写一个程序,用多个参数进行计算。 一切都按我的预期工作,除了我附上的图片中的最后一个。 每次我尝试在命令行中输入超过 2 个数字时,都会出现错误。
输入示例如下:program1.exe 12 + 13 - 2 + 1
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int a, b, rst;
int i;
char opr;
if (argc > 100)
{
printf("Too many arguments!\n");
return 0;
}
else if (argc <= 1)
{
printf("There are no arguments!\n");
return 0;
}
a = atoi(argv[1]);
rst = a;
if (argc == 2)
{
a = atoi(argv[1]);
}
else if (argc % 2 != 0)
{
printf("Invalid fomula!\n");
exit(0);
}
else
{
for (i = 1; 2*i <= argc; i++)
{
b = atoi(argv[2 * i]);
opr = argv[2 * i - 1];
switch (opr)
{
case '+':rst = a + b;
break;
case '-':rst = a - b;
break;
}
rst = a;
}
}
printf("%d", rst);
return 0;
}
【问题讨论】:
-
您是否在调试模式下单步执行代码以确定异常发生的确切位置?
-
当
2*i == argc时,您的循环将访问argv[argc]。argv[argc]是一个 NULL 指针。您的库对atoi()的实现断言它没有收到 NULL 指针,但您的代码给了它一个。严格来说,这是未定义的行为(即,您很幸运,您的atoi()给出了断言失败,而不是 - 比如说 - 重新格式化您的硬盘驱动器或更糟的东西)。 -
短语
opr = argv[2 * i - 1];试图将位于argv[2*1-1的字符串分配给char变量。 -
您能否提供一个与此代码一起使用的命令行输入示例? (请使用该信息编辑您的帖子。)
-
@Jumen - 您没有提供任何关于 cmets 或答案的反馈。你的问题得到解答了吗?
标签: c command-line