在 c++ 中抛出一个值(如果该值为 null)
Throwing a value in c++ if it is null
>我正在尝试检查字符指针是否为空。如何检查值是否为空,我基本上来自java
char* mypath = getenv("MYPATH");
if(!mypath) //this is not working
throw "path not found";
if(mypath == NULL) //this is also not working
throw "path not found";
我收到一个异常"在抛出'char const*'实例后终止调用"
问题不在于测试:你的两个if
都是正确的(就编译器而言——出于可读性的原因,第二个更可取)。 问题是您没有在任何地方捕获异常。 您正在抛出一个 char const[13]
,该 将转换为 char const*
作为异常的类型,并且调用代码中的任何位置都没有catch ( char const* )
。
在C++中,通常(但根本不需要)只抛出派生自std::exception
的类类型;关于此规则的唯一例外是为程序关闭抛出int
,然后只有当这是您工作的上下文中记录的约定时。 (仅当main
捕获int
并返回值时,它才能正常工作。
您需要使用 try/catch 块来捕获异常并处理它。
例如:
#include <stdio.h>
int main(void)
{
try {
throw "test";
}
catch (const char *s) {
printf("exception: %sn", s);
}
return 0;
}
请注意,抛出 C 字符串作为异常确实不合适。请参阅C++异常 - 将 c 字符串作为异常抛出不好吗?正如@Jefffrey所评论的那样,将就此以及替代方案进行讨论。
相关文章:
- 为什么在排序链表上的这种合并实现总是将两个列表都设置为 NULL,而只有一个应该设置一个列表?
- 为什么在C++中增加指针后打印了一个值而不是 NULL/0?
- 我正在尝试计算 char 数组中的内容,直到 null 终止,但每次编译时,我都会得到一个比我的数组大的数字
- [C ] NULL确实在内存中也包含一个特定的地址
- 链表:最后一个指针不是NULL
- 移动语义是否只是一个浅层副本并将其他人的指针设置为 null?
- 为什么一个指向char的C++指针在缺少null终止符的情况下充当字符串
- 为什么一个循环需要电流>链接 !=NULL 和一个电流 != NULL 作为我的链表?
- 当通过其中一个指针删除对象时,C++将所有指针设置为null
- std::string::c_str() 是否总是返回一个以 null 结尾的字符串
- 在 c++ 中抛出一个值(如果该值为 null)
- strtok() - 为什么必须传递 NULL 指针才能获取字符串中的下一个标记
- 在读取 Visual C++ 中的二进制文件(而不是其他编译器)后,每隔一个字符都是 NULL
- Winsock2 tcp/ip-一些数据包被忽略,可能是由于前一个数据包的null终止符
- 为什么我们需要argc,而argv的末尾总是有一个null
- 从技术上讲,在strack跟踪中有一个null this指针是怎么可能的
- 一个有效的指向成员的指针能和一个NULL指针有相同的值吗?
- std::thread::id 默认构造函数不应该创建一个"NULL" id吗?
- 为动态创建的TComponent派生类实例传递一个NULL Owner参数OK
- 从函数c++返回一个NULL字符串