如何捕获 argv 空异常
How to catch argv null exception?
在我的程序中,我从控制台传递一个参数并将其保存到变量中。比方说
const string FileName= argv[1];
如果没有通过的论据,我得到这个
terminate called throwing an exception
如何捕获异常并向用户显示没有传递参数的正确错误?
argc
为您提供argv
的大小,因此请在访问argv
之前检查其值。请记住,argv
是从零开始的,因此argv[0, ..., arrc - 1]
边界也是如此。有用的是,argv[argc]
始终设置为 NULL。
访问无效的argv
元素是未定义的行为。
最后,argv[0]
(如果不是 NULL)是程序名称。
你的主有两个参数 - argv
和 argc
.argv
存储传递给程序的参数argc
存储其计数。因此,您可以通过检查 argc
的值来检查是否向程序提供了参数。
但请记住,argv 中的第一个值是可执行文件名称,所以如果你想检查参数是否已传递给你的程序,你应该有一个这样的检查:
if (argc >= 2) {
... do stuff ...
}
在您的情况下,您只需要检查 argc
的值,因为它包含解析为 argv 的参数数量。
您应该检查argc
如下:
const string FileName= (argc < 2)?string():argv[1];
至于您的具体问题,您可以通过 try/catch 块捕获异常,如
try{
exceptionThrowingOperation();
}
catch( ThrownExceptionType& e ){
exceptionHandling(e);
}
相关文章:
- 处理多个异常集合的C++方法
- 我在c++代码中生成了一个运行时#3异常
- 孤立代码块在结构中引发异常
- C++中的赋值发生,尽管右侧出现异常
- 为什么我的for循环不能正确获取argv
- 从构造函数抛出异常时如何克服内存泄漏
- 异常属于C++中的线程还是进程
- 当类定义不可见时捕获异常
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- 为什么异常不退出程序?
- 为什么我应该在异常处理中使用std::cerr而不是std::cout
- 如何修复链表类实现的未处理异常0xDDDDDDDD
- 关于:C++中异常对象的范围:为什么我没有得到副本?
- 是什么导致了Unity 3D中的"错误线程异常"?
- 如何将strftime中的格式错误作为异常捕获
- 创建具有 new in 函数和"this is nullptr"异常的对象
- 尝试使用智能指针时引发异常
- 函数如何通知用户它基于函数原型抛出异常?
- 是否值得降低我的代码的可读性,以便在出现内存不足错误时提供异常安全性?
- 如何捕获 argv 空异常