我编写了一个函数,它从命令行获取两个数字并将其倍增,如果argc不是3,则应该输出一个cerr行;但它不起作用。我做错了吗?
#include <iostream>
#include <cstdlib>
using namespace std;
int main(int argc, char *argv[])
{
int product;
int first_num = atoi(argv[1]);
int second_num = atoi(argv[2]);
product = first_num * second_num;
if(argc != 3)
{
cerr << "Usage: ./multiply first_num second_num" << endl;
exit(1);
}
else
{
cout << product << endl;
}
}
而不是cerr
打印,出现zsh:分段错误./multiply。
答案 0 :(得分:3)
如果您没有向程序传递任何参数,argv[1]
是空指针且argv[2]
不存在,则不允许您访问该索引。所以你不想尝试将它传递给atoi()。先检查一下,然后查看argv[1]
/ argv[2]
处的内容,只有当您确定它们确实存在时才会显示。
if(argc != 3)
{
cerr << "Usage: ./multiply first_num second_num" << endl;
exit(1);
}
else
{
int product;
int first_num = atoi(argv[1]);
int second_num = atoi(argv[2]);
product = first_num * second_num;
cout << product << endl;
}