运行C程序进行整数乘法,参数不足时出现分段错误



我正在编写一个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("%dn", x * y);
}
else
{ 
printf("Errorn");
return 1;
}
return 0;
}

我做错了什么,我如何修改我的代码,以产生预期的输出时调用不充分的参数?

提前感谢您的帮助。

你想要这个:

int main(int argc, char* argv[]) // char* argv[] here
{
if (argc != 3)                // test argc *before* dereferencing argv[1] and argv[2]
{
printf("Errorn");
return 1;
}
int x = atoi(argv[1]);
int y = atoi(argv[2]);
printf("%dn", x * y);  
return 0;
}

在之前解引用argv[1]argv[2]测试argc是否为3。指令按顺序执行。如果在命令行上不带参数地执行程序,则argc将为1,而argv[1]超出范围,因此出现seg错误。

而且main的签名是错误的,应该是int main (int argc, char *argv[])main的第二个参数是指向char的指针数组。

相关内容

  • 没有找到相关文章

最新更新