如何捕获argv null异常?

时间:2013-09-13 07:27:53

标签: c++ exception-handling

在我的程序中,我从控制台传递一个参数并将其保存到变量中。我们说

const  string FileName= argv[1];

如果没有参数传递我得到这个

terminate called throwing an exception

如何捕获异常并向用户显示没有传递参数的正确错误?

4 个答案:

答案 0 :(得分:3)

argc为您提供argv的大小,因此请在访问argv之前检查其值。请记住,argv从零开始,因此具有范围argv[0, ..., arrc - 1]。有用的是,argv[argc]始终设置为NULL。

访问argv的无效元素是未定义的行为

作为最后的评论,argv[0](如果它不是NULL)是程序名称。

答案 1 :(得分:1)

在你的情况下,你应该检查argc的值,因为它包含了被解析为argv的参数数量。

答案 2 :(得分:1)

您的主要有两个参数 - argvargc。当argv存储传递给您的程序argc的参数时,它们会存储它们的计数。因此,您可以通过检查argc的值来检查是否为您的程序提供了参数。

请记住,argv中的第一个值是可执行文件名,因此如果要检查参数是否已传递给程序,则应检查:

if (argc >= 2) {
  ... do stuff ...
}

答案 3 :(得分:0)

您应该检查argc,如下所示:

const  string FileName= (argc < 2)?string():argv[1];

至于您的具体问题,您可以通过try / catch块捕获异常,如

try{
exceptionThrowingOperation();
}
catch( ThrownExceptionType& e ){
exceptionHandling(e);
}