**已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。
这个问题是由一个错字或一个无法再复制的问题引起的。虽然类似的问题可能是on-topic在这里,但这个问题的解决方式不太可能帮助未来的读者。
1年前关闭。
此帖子4天前编辑并提交审核,未能重新打开帖子:
原始关闭原因未解决
Improve this question
我正在编写一个C程序,该程序应该将两个整数相乘并打印乘法结果。如果程序没有收到正好2个参数,则应该打印“Error”并返回1。
我用下面的命令编译了这个程序:gcc -Wall -pedantic -Werror -Wextra -std=gnu89 3-mul.c -o mul
当我用./mul int1 int2
或./mul int1 int2 int3
运行程序时,它输出正确的结果。然而,当我只用./mul
运行它时,它产生了一个分段错误,而不是像我期望的那样打印“Error”。
下面是我的代码:
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv)
{
int x = atoi(argv[1])
int y = atoi(argv[2])
if (argc == 3)
{
printf("%d\n", x * y);
}
else
{
printf("Error\n");
return 1;
}
return 0;
}
我做错了什么,当参数不足时,我如何修改代码以产生预期的输出?
先谢谢你的帮助。
1条答案
按热度按时间qzlgjiam1#
你想要这个:
在测试
argc
是否为3之前,您正在取消引用argv[1]
和argv[2]
。指令按顺序执行。如果您在命令行上执行程序而不带参数,则argc
将为1并且argv[1]
超出边界,因此出现seg错误。而且
main
的签名是错误的,它应该是int main (int argc, char *argv[])
。main
的第二个参数是指向char
的指针数组。