【问题标题】:C++ perform action when command line argument is empty [duplicate]C ++在命令行参数为空时执行操作[重复]
【发布时间】:2021-10-29 11:12:37
【问题描述】:

我最近一直在做一个程序,但在某个步骤上有点卡住了。当程序从 shell 运行时,它会在没有传递参数时执行一个动作。也许有人可以帮助我,或指出正确的方向?

int main(int argc, char* argv[])
{
    string paramPassed = argv[1];
    if(paramPassed == "")
        cout << UseDriver();
    
    else if(paramPassed == memMap)
        cout << UseMemMap();
    
    else{
        if(paramPassed == help)
            cout << PrintProgramHelp();
        
        else if(paramPassed == helpMin)
            cout << PrintProgramHelp();
        
        else
            cout << "Wrong selection. Input --help or -h for more options." << endl;
    }
    cout << "Press any key to continue." << endl;   
    cin.get();
    return (0);
}

上面没有输入的代码给了我:

terminate called after throwing an instance of 'std::logic_error'
what():  basic_string::_M_construct null not valid

我能做什么?如果我在程序启动时没有提供任何参数,它会给我一个分段错误。

这里有什么我遗漏的吗?

【问题讨论】:

  • 先计算你的论点(argc 是有原因的),否则你只是要求各种 UB。

标签: c++ c++11


【解决方案1】:

如果没有命令行参数,那么在argv[1] 处的索引是未定义的行为。该索引处没有任何内容,而不是您正在检查的空字符串。

要检查是否没有命令行参数(在程序名称之后,始终为argv[0]),您可以像这样简单地使用argc 的值

if (argc == 1)
  // do whatever when no command line args are provided

【讨论】:

  • 是的,它解决了我的问题。谢谢。
  • @FrankH 如果你的问题被答案解决了,你可以继续接受它。
  • 接受,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-21
  • 2012-11-06
  • 2016-03-23
  • 1970-01-01
  • 2018-12-14
  • 2018-10-16
  • 2016-12-28
相关资源
最近更新 更多