Cerr不工作

时间:2015-07-17 19:34:42

标签: c++

我编写了一个函数,它从命令行获取两个数字并将其倍增,如果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。

1 个答案:

答案 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;
 }