Cerr Not Working

Cerr Not Working

本文关键字:Working Not Cerr      更新时间:2023-10-16

我写了一个函数,从命令行中获取两个数字并将其相乘,如果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: segmentation fault ./multiply

如果你没有传递任何参数给你的程序,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;
 }