当运行C程序进行参数不足的整数乘法时出现分段错误[关闭]

q8l4jmvw  于 2023-04-19  发布在  其他
关注(0)|答案(1)|浏览(92)

**已关闭。**此问题为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;
}

我做错了什么,当参数不足时,我如何修改代码以产生预期的输出?
先谢谢你的帮助。

qzlgjiam

qzlgjiam1#

你想要这个:

int main(int argc, char* argv[]) // char* argv[] here
{
  if (argc != 3)                // test argc *before* dereferencing argv[1] and argv[2]
  {
    printf("Error\n");
    return 1;
  }

  int x = atoi(argv[1]);
  int y = atoi(argv[2]);
  printf("%d\n", x * y);  
  return 0;
}

测试argc是否为3之前,您正在取消引用argv[1]argv[2]。指令按顺序执行。如果您在命令行上执行程序而不带参数,则argc将为1并且argv[1]超出边界,因此出现seg错误。
而且main的签名是错误的,它应该是int main (int argc, char *argv[])main的第二个参数是指向char的指针数组。

相关问题